此文档是个人对nginx配置优化之总结,方便后续用到时查阅。
worker_processes 8
nginx要开启的进程数,建议按照cpu的核数分配,一般为它的倍数。
worker_rlimit_nofile 102400
指定文件描述符数量。指一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除。
但nginx分配请求并不是那么均匀,所以与ulimit -n的值保持一致即可。
####events{
multi_accept on;
告诉nginx收到一个新连接通知后接受尽可能多的连接,默认off。use epoll;
使用网络I/O模型,Linux推荐使用epoll。
worker_connections 102400;
每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。
####}
#####http
client_header_buffer_size 4k
客户端请求头部的缓冲区大小,这个可以根据系统分页大小来设置,一般一个请求的头部大小不会超过1k,
不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
large_client_header_buffers 4 4k
open_file_cache max=102400 inactive=20s
这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。
open_file_cache_valid 30s
多长时间检查一次缓存的有效信息。
open_file_cache_min_uses 1;
open_file_cache_errors on|off;
是否缓存在文件缓存中,缓存打开文件时出现找不到路径,没有权限等的错误信息。
client_max_body_size 300m;
设定通过nginx上传文件的大小。
server_names_hash_bucket_size 32|64|128;
如果nginx配置了一个超长的域名后,ngnix -t 检查配置文件时出现如下错误:
could not build the server_names_hash, you should increase server_names_hash_bucket_size: 128
server_names_hash_max_size 512;
如果定义了大量servername,得到如下错误:
could not build the server_names_hash,
you should increase either server_names_hash_max_size: 512
or server_names_hash_bucket_size: 128
根据实际情况设定server_names_hash_max_size和server_names_hash_bucket_size。
sendfile on;
开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on。
如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
autoindex on;
开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on;
防止网络阻塞
tcp_nodelay on
;
防止网络阻塞
keepalive_timeout 60
;
长连接超时时间,单位是秒
client_header_timeout 10;
client_body_timeout 10;
#client_header_timeout 和client_body_timeout 设置请求头和请求体(各自)的超时时间。
reset_timedout_connection on;
告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空send_timeout 10;
指定客户端的响应超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,nginx就会关闭连接。
fastcgi_connect_timeout 300;
指定连接到后端FastCGI的超时时间
fastcgi_send_timeout 300;
向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。
fastcgi_read_timeout 300;
接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。
fastcgi_buffer_size 64k;
指定读取FastCGI应答第一部分需要用多大的缓冲区。一般
同
client_header_buffer_size
fastcgi_buffers 4 64k;
指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求,
fastcgi_busy_buffers_size 128k;
默认值是fastcgi_buffers的两倍
fastcgi_temp_file_write_size 128k;
在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍。
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
,其值从1到9,1为最小化压缩(处理速度快),9为最大化压缩(处理速度慢)。
gzip_types text/plain application/x-javascript text/css application/xml;
压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
gzip_disable “MSIE [1-6].(?!.*SV1)”;
使用正则表达式来指定某些不需要gzip压缩的浏览器(将和User-Agents进行匹配)。依赖于PCRE库。在0.6.23版本中首次使用。
0.7.63版本以后,你可以为IE5.5和IE6 SP1使用msie6参数来禁止gzip压缩。
gzip_vary on;
启用应答头“Vary: Accept-Encoding”,注意,由于一个bug将导致IE 4-6无法缓存内容,默认off。
#####}
######server{
location ~ ^(.+\.php)(.*)$ {
set $script $uri;
set $path_info "/";
if ($uri ~ "^(.+\.php)(/.+)") {
set $script $1;
set $path_info $2;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php?IF_REWRITE=1;
include fastcgi_params;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root/$script;
fastcgi_param SCRIPT_NAME $script;
}
指定
浏览器图片缓存时间设置
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 10d;
}
#JS和CSS缓存时间设置
location ~ .*\.(js|css)?$
{
expires 1h;
}
location ~ /\.ht {
deny all;
}
######}