nginx 配置说要点
详细的 nginx 配置方法、各指令的用法请参照 http://www.nginx.cn 或官方站 http://www.nginx.net 上的 wiki 文档,下面列出一些配置要点:
● worker_processes指令指定处理进程的数量。一般推荐为处理器的个数,例如这台机器有两个双核cpu,则设置为4。如果用来进行下载等应用,可以适当增加,以避免进程在堵塞在IO等待中。
● 在事件处理配置段(event)中,显示指定用 epoll 方式处理。
● worker_connections 指令:指定 nginx 处理进程的个数,其与总处理量的关系用公式表达如下:
● MaxClient = worker_processes * worker_connections。因此这两个数的乘积若大于系统最大可用tcp/ip栈数是没有意义的。例当 worker_processes 设置为4时,worker_connections 设置为 10240 即足够使用。
● sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on。如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络IO处理速度,降低系统 uptime。
● server_tokens 指令指定 nginx 在应答报文 header 和默认错误页面中是否显示版本号等具体信息。生产环境中应尽量避免透露过多的服务器信息,因此,必须设置为 off。类似的还有 php 页面,在配置文件中必须指定 fastcgi_hide_header X-Powered-By; 避免在应答报文 header 中透露服务器当前使用的 php 版本号。
● Nginx 监听非80端口,进行目录后缀“/”补全时,返回的 Location 值中的URL带了端口号。此操作逻辑是正确的,但是与我们生产环境有冲突。生产环境中,请求通过前端 alteon 设备重定向至后端的8080、9090端口,这些端口并不对外,因此就会出现重定向的地址无法访问的情况。需要在所有虚拟主机配置中通过配置 rewrite 来避免这种情况:rewrite ^/([^.]+[^/])$ http://$host/$1/ permanent;
注意事项
● 在生产运行中,请注意 Nginx 的日志,定期进行日志文件的归档和截断。
● 当要求 reload(重新装载配置文件)时,nginx 会对配置文件进行检查,如果配置文件有错,那么会继续使用旧的,已装载完毕的配置文件运行。
● 为保证生产系统的稳定运行,修改完配置文件后,必须进行 check 操作,以确保配置文件的正确性。
● 为保证生产系统的稳定运行,nginx 与 php-cgi 的通讯端口请使用 tcp/ip 方式,而不使用 unix 套接字。虽然tcp/ip效率较低,但是相对稳定,而且可以将php运行在其他机器上。当 php 应用运行较慢,并发请求多的情况下,使用 unix 套接字容易导致连接失败,从而报告 502 错误(Bad Gateway)。