使用的用户和组
user www www;
指定工作衍生进程数(一般等于CPU的总核数或总核数的两倍)
worker_processes 8;
前方高能,请注意!下面分别是开启了8个内核,8个进程(如果需要开启16进程,00000001 修改成00000001 00000010 代表第一个CPU内核处理第一个和第二个进程,有多少个进程就写多少个数,每个数的第几位代表对应的第几核)
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
下面这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是系统的最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n(需要在Linux上调整这个数)的值保持一致。
worker_rlimit_nofile 204800;
使用epoll的I/O模型,用这个模型来高效处理异步事件
use epoll;
每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes * worker_connections。
worker_connections 204800;
限制用户上传文件的大小
client_max_body_size 300m;
客户端缓存文件的大小
client_body_buffer_size 128k;
客户端请求内容超时时间,1分钟
client_body_timeout 600;
客户端请求header头信息的超时时间,1分钟
client_header_timeout 600;
这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
open_file_cache max=65535 inactive=60s;
这个是指多长时间检查一次缓存的有效信息。
open_file_cache_valid 80s;
指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件更改信息一直是在缓存中打开的
open_file_cache_min_uses 1;
URI过长或request header过大导致400错误
#start
servername的哈希表大小 -- 客户端请求头缓冲区大小
server_names_hash_bucket_size 128k;
请求头总长度大于128k时使用large_client_header_buffers设置的缓存区。指令参数4为个数,128k为大小,申请4个128k。默认是8k。,
large_client_header_buffers 4 128k;
#end
客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得
client_header_buffer_size 2k;
可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效。
sendfile on;
告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。就是说数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。tcp_nopush 这个参数只有 sendfile on 的时候才有用。
tcp_nopush on;
告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,
就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。
tcp_nodelay 只在 keepalive 连接状态中使用。
tcp_nodelay on;
http连接超时时间,默认是60s,功能是使客户端到服务器端的连接在设定的时间内持续有效,当出现对服务器的后继请求时,该功能避免了建立或者重新建立连接。切记这个参数也不能设置过大!否则会导致许多无效的http连接占据着nginx的连接数,终nginx崩溃!在一般情况下,这个配置会减少网络流量的消耗,减少请求连接数,例如用户在浏览网页的时候保持连接,减少连接数的开销。但是在高并发下,这个配置会直接影响NGINX的性能。相反,这个数调小可以提高并发数。
keepalive_timeout 60;
下面这个参数将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cache max=204800 inactive=20s;
open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,
文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除
open_file_cache_min_uses 1;
下面这个是指多长时间检查一次缓存的有效信息。
open_file_cache_valid 30s;
隐藏响应头中的有关操作系统和web server(Nginx)版本号的信息,这样对于安全性是有好处的。
server_tokens off;
另外,FastCGI自身也有一些配置需要进行优化,如果你使用php-fpm来管理FastCGI,可以修改配置文件中的以下值:
同时处理的并发请求数,即它将开启最多60个子线程来处理并发连接。
<value name="max_children">60</value>
最多打开文件数。
<value name="rlimit_files">65535</value>
每个进程在重置之前能够执行的最多请求数。
<value name="max_requests">65535</value>