nginx.conf配置文件详解
Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
以下是配置文件 nginx.conf 中文注释说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | #使用哪个用户启动 nginx 前面是用户,后面是用户组 user www www; #nginx工作的进程数量 worker_processes 2; # [ debug | info | notice | warn | error | crit ] 日志的位置 error_log /var/htdocs/logs/nginx_error.log crit; error_log /dev/null; #进程号保存文件 pid /usr/local/nginx/nginx.pid; #每个进程可以打开的最大文件字节数 worker_rlimit_nofile 51200; events { # use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; use epoll; #使用epoll(linux2.6的高性能方式) worker_connections 51200; #每个进程最大连接数(最大连接=连接数x进程数) } http { #文件扩展名与文件类型映射表 include mime.types; #默认文件类型 default_type application/octet-stream; #日志文件格式 log_format main '$remote_addr - $remote_user [$time_local] $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; log_format download '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$http_range" "$sent_http_content_range"'; #默认编码 charset utf-8; server_names_hash_bucket_size 128; #开启高效文件传输模式 sendfile on; #以下两个选项用于防止网络阻塞 tcp_nopush on; tcp_nodelay on; #长链接超时时间 keepalive_timeout 300; #fastcgi连接超时时间,下面的看字面意思都能理解个大概了,就不解释了. fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_temp_path /dev/shm; #打开gzip压缩 gzip on; #最小压缩文件大小 gzip_min_length 1k; #压缩缓冲区 gzip_buffers 4 8k; #压缩版本(默认1.1,前端为squid2.5使用1.0) gzip_http_version 1.1; #压缩类型,默认就已经包含text/html 所以下面就不用再写了,当然写上去的话,也不会有问题,但是会有一个warn gzip_types text/plain application/x-javascript text/css text/html text/javascript application/xml; #错误页面 error_page 404 http://yhjhappy234.blog.163.com/; error_page 403 http://yhjhappy234.blog.163.com/; #上传文件大小限制 client_max_body_size 2m; #设定请求缓 client_header_buffer_size 16k; large_client_header_buffers 4 64k; #设定负载均衡的服务器列表 #如果在同一台机器上,单独起4组独立的php-cgi进程(每组8个子进程),性能应该不如1组php-cgi进程(32个子进程),因为1组进程,eaccelerator的PHP二进制文件缓存是共享的,1组进程命中率较高。 #不过好处是,碰到某组的页面假死的话,其他端口就可以接管了,实测下来似乎发生502错误的概率降低了很多,或者说我这样配置以后还没有遇到 upstream mysvr { #weigth参数表示权值,权值越高被分配到的几率越大 #本机上的Squid开启3128端口 server 192.168.101.26:8080 weight=5; server 192.168.101.27:8080 weight=1; server 192.168.101.202:8080 weight=1; } #下面开始虚拟主机的配置 server { listen 80; server_name www.kedou.com; index index.jsp; root /usr/local/tomcat/webapps/ROOT; if (-d $request_filename) { rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent; } #设定本虚拟主机的访问日志 access_log logs/www.kedou.com.access.log main; location ~ .*\.php?$ { include fcgi.conf; fastcgi_pass 192.168.101.202:8080 fastcgi_index index.jsp; } #如果访问 /img/*, /js/*, /css/* 资源,则直接取本地文件,不通过squid #如果这些文件较多,不推荐这种方式,因为通过squid的缓存效果更好 location ~ ^/(img|js|css)/ { root /var/htdocs/kedou; expires 24h; } #对 "/" 启用负载均衡 location / { proxy_pass http://127.0.0.1; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } #设定查看Nginx状态的地址 location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; } } } |
修改Nginx版本头信息(可选),编辑src/http/ngx_http_header_filter_module.c:
1 | # vi +48 src/http/ngx_http_header_filter_module.c |
找到下面两行:
1 2 | static char ngx_http_server_string[] = "Server: nginx" CRLF; static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF; |
将其修改为:
1 2 | static char ngx_http_server_string[] = "Server: Ninja Web Server" CRLF; static char ngx_http_server_full_string[] = "Server: Ninja Web Server" CRLF; |
保存并关闭文件。现在可以开始编译服务器了,将下面的配置代码添加到nginx.conf中,禁止在所有自动产生的错误页面中显示Nginx版本号:
1 | server_tokens off |