nginx 优化

 

 

user www www;    
worker_processes 8; 
error_log /var/log/nginx/error.log info;   ##需改
pid   /var/run/nginx.pid;                  ##需改
worker_rlimit_nofile 65535;  
worker_cpu_affinity 10000000 01000000 00100000 00010000 00001000 00000100 00000010 00000001;  #需改
events {
    use epoll;   
    multi_accept on; 
    worker_connections 65535;  
}
http{
    include mime.types; 
    default_type application/octet-stream; 
    server_names_hash_bucket_size 128; 
    client_header_buffer_size 4k;  
    large_client_header_buffers 4 64k; 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '"$status" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" '
                      '"$gzip_ratio" $request_time $bytes_sent $request_length $upstream_addr';
 
    client_max_body_size   100m;  #根据情况改
    sendfile on;     
    server_tokens off;  
    tcp_nopush     on;   
    tcp_nodelay    on;  
    keepalive_timeout 60; 
    request_pool_size 4k; 
    connection_pool_size        256;  
    client_header_timeout  15; 
    send_timeout 15;  
    client_body_timeout 15;
    output_buffers  4 32k;  
    postpone_output  1460; 
    client_body_temp_path  /data/client_body_temp;  #需改
    fastcgi_temp_path /data/nginx_tmp ;            #需改
    fastcgi_connect_timeout 300;  
    fastcgi_send_timeout 300;   
    fastcgi_read_timeout 300; 
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;    
    fastcgi_busy_buffers_size 128k;  
    fastcgi_temp_file_write_size 128k; 
    open_file_cache max=204800 inactive=20s;
    open_file_cache_min_uses 1;  
    open_file_cache_valid 30s;  
    proxy_connect_timeout 90;  
    proxy_read_timeout 180;   
    proxy_send_timeout  180;
    proxy_buffer_size 16K;
    proxy_buffers 4 256k; 
    proxy_temp_path  /data/proxy_temp_dir;  #根据情况改
    proxy_cache_path /data/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=10g;  #根据情况改
    fastcgi_intercept_errors on;
    gzip on; 
    gzip_min_length 1k; 
    gzip_buffers 4 32k; 
    gzip_comp_level 2;
    gzip_types  text/plain text/css text/javascriptapplication/json application/javascript application/x-javascriptapplication/xml; 
    gzip_vary on; 
    gzip_proxied     any; 
    gzip_disable "MSIE [1-6].(?!.*SV1)"; 
    include extra/*.conf;    ##根据情况改
}

 

 

user www www;    #定义Nginx运行的用户和用户组
worker_processes 8; #nginx进程数,建议设置为等于CPU总核心数.
error_log /var/log/nginx/error.log info;  #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
pid /var/run/nginx.pid;  #进程文件
worker_rlimit_nofile 65535;  #一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致.

worker_cpu_affinity 10000000 01000000 00100000 00010000 00001000 00000100 00000010 00000001; ##8核cpu开启8个进程(00000001表示开启第一个cpu内核,00000010表示开启第二个cpu内核,依次类推)

events         ##工作模式和连接数上限
{
use epoll;   ##参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是

multi_accept on; ##告诉nginx收到一个新连接通知后接受尽可能多的连接,默认是on,设置为on后,多个worker按串行方式来处理连接,也就是一个连接只有一个worker被唤醒,其他的处于休眠状态,设置为off后,多个worker按并行方式来处理连接,也就是一个连接会唤醒所有的worker,直到连接分配完毕,没有取得连接的继续休眠。当你的服务器连接数不多时,开启这个参数会让负载有一定的降低,但是当服务器的吞吐量很大时,为了效率,可以关闭这个参数。
worker_connections 65535;  #单个进程最大连接数(最大连接数=连接数*进程数)

}

http   ##设定http配置
{
 include mime.types; #文件扩展名与文件类型映射表
 default_type application/octet-stream; #默认文件类型
server_names_hash_bucket_size 128; ##保存服务器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。因此,如果Nginx给出需要增大hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小.
client_header_buffer_size 4k;  #客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
large_client_header_buffers 4 64k; #请求头总长度大于64k时使用large_client_header_buffers设置的缓存区
client_max_body_size   100m; #上传文件大小限制(根据实际情况设定)
sendfile on; #sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
 server_tokens off;  ##隐藏版本号
tcp_nopush     on; #此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
tcp_nodelay    on; #禁用 Nagle 算法,Nginx 只会针对处于 keep-alive 状态的 TCP 连接才会启用 tcp_nodelay
keepalive_timeout 60; #keepalive超时时间。
request_pool_size 4k; #精确调整每个请求的内存配额,这个指令对性能影响极小,一般不使用。
 connection_pool_size        256; #ngixn会对每个建立成功的TCP连接会预先分配一个内存池,参数设置内存池初始化大小。慎重设置,因为更大的size会使服务器消耗的内存增多,而更小的size则会引发更多的内存分配次数。 
client_header_timeout  15; ##读取HTTP头部的超时时间
send_timeout 15; #响应客户端超时时间,这个超时时间仅限于两个活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx关闭连接
client_body_timeout 15;#设置请求体的超时时间。我们也可以把这个设置低些,超过这个时间没有发送任何数据
output_buffers  4 32k; ##设置nginx获取几个单位的缓存空间,用于存放要向客户端发送的数据。此设置为:按照原始数据大小以32K为单位的4倍大小申请内存空间。
postpone_output  1460; #当nginx向客户端发送的数据达到1460字节的时候,才向客户端发送数据,提高效率
client_body_temp_path /data/client_body_temp; #设置记录文件的目录 可以设置最多3层目录

fastcgi_temp_path /data/nginx_tmp ;#缓存临时目录

fastcgi_connect_timeout 300;  #指定连接到后端FastCGI的超时时间。
fastcgi_send_timeout 300;   #向FastCGI传送请求的超时时间。
fastcgi_read_timeout 300; #指定接收FastCGI应答的超时时间。

fastcgi_buffer_size 64k;  #指定读取FastCGI应答第一部分需要用多大的缓冲区,默认的缓冲区大小为fastcgi_buffers指令中的每块大小,可以将这个值设置更小。
fastcgi_buffers 4 16k;    #指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求,如果一个php脚本所产生的页面大小为256KB,那么会分配4个64KB的缓冲区来缓存,如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp_path指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于磁盘。一般这个值应该为站点中php脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“8 32K”、“4 64k”等。
fastcgi_busy_buffers_size 128k;  ##建议设置为fastcgi_buffers的两倍,繁忙时候的buffer
fastcgi_temp_file_write_size 128k; ##在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍,该数值设置小时若负载上来时可能报502BadGateway

open_file_cache max=204800 inactive=20s;#这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件
数一致,inactive 是指经过多长时间文件没被请求后删除缓存。

open_file_cache_min_uses 1;  #open_file_cache指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文
件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除。

open_file_cache_valid 30s;  ##这个是指多长时间检查一次缓存的有效信息。

proxy_connect_timeout 90;  #后端服务器连接的超时时间_发起握手等候响应超时时间

proxy_read_timeout 180;   #接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)

proxy_send_timeout  180;#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据

proxy_buffer_size 16K;#设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头,默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小

proxy_buffers 4 256k; #设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8k

proxy_busy_buffers_size 256k; #设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长

proxy_temp_file_write_size 256K;#设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长

proxy_temp_path  / data/proxy_temp_dir; ##proxy_temp_path和proxy_cache_path指定的路径必须在同一分区

 proxy_cache_path /data/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=10g;#设置内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为10GB。

fastcgi_intercept_errors on;#这个指令指定是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。

 gzip on; ##开启gzip压缩

gzip_min_length 1k; #设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取,默认值是0,不管页面多大都进行压缩,建议设置成大于1K,如果小与1K可能会越压越大。

gzip_buffers 4 32k; #压缩缓冲区大小,表示申请4个单位为32K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。

gzip_comp_level 2;#压缩比例,用来指定GZIP压缩比,1压缩比最小,处理速度最快,9压缩比最大,传输速度快,但是处理慢,也比较消耗CPU资源。

gzip_types  text/plain text/css text/javascriptapplication/json application/javascript application/x-javascriptapplication/xml; #用来指定压缩的类型,‘text/html’类型总是会被压缩。

gzip_vary on; #varyheader支持,改选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过nginx压缩的数据

gzip_proxied     any; #nginx做反向代理时启用该选项,表示无论后端服务器的headers头返回什么信息,都无条件启用压缩

gzip_disable "MSIE [1-6].(?!.*SV1)"; #如果IE1-6的浏览器的gzip压缩,因为他们不支持

 include  include extra/*.conf  ##虚拟主机文件

posted @ 2018-05-17 10:33  巽逸  阅读(188)  评论(0编辑  收藏  举报