首页 > 代码库 > nginx配置文件详解(1.8.1)
nginx配置文件详解(1.8.1)
全局区:
user nginx nginx; #nginx的用户,和用户组
worker_processes 1; #工作进程个数等于逻辑cpu个数
error_log logs/error.log notice; #错误日志的存放路径,及等级[debug|info|warn|error|crit]
pid logs/nginx.pid;
worker_rlimit_nofile 204800;
#指定进程可以打开的最大描述符
这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文
件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。
这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。
events {
use epoll; //使用网络IO模型,Linux系统采用epoll,freebsd采用kqueue
worker_connections 65535; //最大连接数
}
http {
server_tokens off; #隐藏nginx的版本
include mime.types; #设定mime类型,由mime.types文件定义
default_type application/octet-stream;
#default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口。
server_names_hash_bucket_size 128;
#不能带单位!配置个主机时必须设置该值,否则无法运行Nginx或测试时不通过,该设置与server_names_hash_max_size 共同控制保存服务器名的HASH表,hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。若hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。若报出hash max size 或 hash bucket size的提示,则我们需要增加server_names_hash_max_size的值。
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"‘;
access_log logs/access.log main;
keepalive_timeout 65; #连接超时时间
tcp_nodelay on; #打开TCP_NODELAY在包含 了keepalive才有 效
gzip on; #打开GZIP压缩,实时压缩输 出数据流
gzip_min_length 1k; #文件大于1K就进行压缩
gzip_buffers 4 16k; #设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间
gzip_http_version 1.0;
#用于识别http协议的版本,早期的浏览器不支持gzip压缩,用户会看到乱码,
所以为了支持前期版本加了此选项,目前此项基本可以忽略
gzip_comp_level 2;
#一般来说gzip_comp_level的值不会在性能方面有多大的差别,设为为4-5即可。 一味的增加它是没有意义的只是浪费的CPU的周期。
#设置gzip压缩等级,等级越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大.等级是1-9
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
client_header_buffer_size 4k; 客户端请求头部的缓冲区大小,根据系统分页大小来设置.
#一般一个请求头的大小都不会超过1k,由于一般系统分业都要大于4K,所以这里设置为
分页的大小4k,分页大小可以用getconf PAGESIZE这个命令来获得
large_client_header_buffers 4 128k;
#4为个 数,128k为大 小,默认是4k。申请4个128k。当http 的URI太长或者request header过大时 会报414 Request URI too large或400 bad request,这是很有可能是cookie中写入的值太大造成的,因为header中的其 他参数的size一般 比较固定,只有cookie可能 被写入较大的数据,这时可以调大上述两个值,相应的浏览器中cookie的字 节数上限会增大。
client_max_body_size 300M; #设置nginx上传文件的大小
open_file_cache max=65535 inactive=60s;
#这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
sendfile on; #打开系统sendfile()函数的支持
tcp_nopush on;
#此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
}
location / {
root html;
index index.html index.htm;
auth_basic "nginx"; //提示和httpd.conf中的authNam字段是一样的意思.
auth_basic_user_file password;//放置用户名:和密码的文件 htpasswd -c password tom
输入两个密码就行了.
}
#server中有以下参数
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
proxy_cache_path /tmp/nginx/cache levels=1:2 keys_zone=staticfilecache:80m inactive=1d max_size=2500m;
##设置缓存目录为二级目录,共享内存区大小,非活动时间,最大容量,注意临时目录要跟缓存目录在同一个分区。
proxy_temp_path /tmp/nginx/proxy;
##设置临时目录
proxy_connect_timeout 300;
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 120;
#连接成功后,后端服务器响应时间。
proxy_send_timeout 120;
#后端服务器数据回传时间
proxy_buffering on;
#该指令开启从后端被代理服务器的响应内容缓冲.
#如果缓冲区开启,nginx假定被代理的后端服务器会以最快速度响应,并把内容保存在由指令proxy_buffer_size 和 proxy_buffers指定的缓冲区里边.
#如果响应内容无法放在内存里边,那么部分内容会被写到磁盘上。
#如果缓冲区被关闭了,那么响应内容会按照获取内容的多少立刻同步传送到客户端。
#nginx不尝试计算被代理服务器整个响应内容的大小,nginx能从服务器接受的最大数据,是由指令proxy_buffer_size指定的.
#对于基于长轮询(long-polling)的Comet 应用来说,关闭 proxy_buffering 是重要的,不然异步响应将被缓存导致Comet无法工作
proxy_buffer_size 4k;
#设置代理服务器保存用户头信息的缓冲区大小。
#该指令设置缓冲区大小,从代理后端服务器取得的第一部分的响应内容,会放到这里.
#小的响应header通常位于这部分响应内容里边.
#默认来说,该缓冲区大小等于指令 proxy_buffers所设置的;但是,你可以把它设置得更小.
proxy_buffers 8 4k;
#该指令设置缓冲区的大小和数量,从被代理的后端服务器取得的响应内容,会放置到这里. 默认情况下,一个缓冲区的大小等于内存页面大小,可能是4K也可能是8K,这取决于平台。内存页面大小可以用getconf PAGESIZE命令获取。
proxy_temp_file_write_size 64k;
#设定缓存文件夹大小,大于这个值,将从upstream服务器传送。
proxy_busy_buffers_size 16k;
#高负载下缓冲大小。proxy_busy_buffers_size是用来控制同时传输到客户端的buffer数量的.
#http://blog.sina.com.cn/s/blog_5410860001011fq1.html
####
autoindex on;
# 防止目录浏览,应该也可以用在server中。
include /etc/nginx/conf.d/*.conf;
}
conf.d下的配置文件
upstream test{
server 192.168.0.1:3000;
server 192.168.0.2:3000;
}
#轮询检查,每个请求按时间顺序逐一分配到不同的后端服务器 ,如果后端服务器down掉,能自动剔除。
upstream www.a.com{
server 10.1.230.215:80 weight=2 max_fails=3 fail_timeout=20s;
server 10.1.230.216:80 weight=2 max_fails=3 fail_timeout=20s;
server 10.1.230.217:80 weight=2 max_fails=3 fail_timeout=20s;
server 10.1.230.218:80 backup;
keepalive 32;
#做反向代理时很有用。设置保存的最大连接数。这样可以减少不必要的连接建立时间。从而减小网络之间的流量
check interval=3000 rise=2 fall=5 timeout=1000;
#需要nginx_upstream_check_module模块支持
#interval检测时间间隔单位是毫秒
#rise请求2次正常的话,标记为up
#fall表示请求5次都失败,标记为down
#timeout表示超时时间单位是毫秒
#前段nginx做反代,如果后端服务器宕掉的话,nginx是不能把这台realserver提出upstream的,所以还会有请求转发到后端的这台realserver上面去,虽然nginx可以在localtion中启用proxy_next_upstream来解决返回给用户的错误页面,方法在:http://www.linuxyan.com/web-server/67.html,大家可以参考一下,但这个还是会把请求转发给这台服务器的,然后再转发给别的服务器,这样就浪费了一次转发,这次借助与淘宝技术团队开发的nginx模快nginx_upstream_check_module来检测后方realserver的健康状态,如果后端服务器不可用,则所以的请求不转发到这台服务器。
#http://www.linuxyan.com/web-server/90.html
}
#weight指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
#server中有以下参数
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
upstream php{
ip_hash;
server 10.1.230.217:80;
server 10.1.230.215:80;
server 10.1.230.216:80;
server 10.1.230.218:80;
check interval=3000 rise=2 fall=5 timeout=1000;
}
#ip_hash方式,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session 的问题。
upstream backend {
server server1;
server server2;
fair;
}
#fair,第三方按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
#url_hash(第三方)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
proxy_temp_path /tmp/nginx/temp;
#设置临时目录
proxy_cache_path /tmp/nginx/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
#设置缓存目录为二级目录,共享内存区大小,非活动时间,最大容量,注意临时目录要跟缓存目录在同一个分区。
autoindex on;
# 防止目录浏览
server {
listen 80;
#侦听80端口
server_name www.a.com;
#定义使用www.xx.com访问
access_log /var/log/nginx/www.a.com-access_log main;
#######负载均衡配置#########
location ~ /\.ht {
deny all;
# 防止.ht文件被请求
}
if ($host = ‘a.com‘) {
rewrite ^/(.*)$ http://www.a.com/$1 permanent;
}
#如果访问地址是a.com,则转向www.a.com
location =/ {
proxy_pass http://www.a.com;
include /etc/nginx/conf.d/proxy.conf;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
#proxy_next_upstream用来定义故障转移策略,当后端服务节点返回500、502、503、504和执行超时等错误时,自动将请求转发到upstream负>载均衡组中的另一台服务器,实现故障转移
}
#访问首页负载到www.a.com这组服务器。这里并不包括http://www.a.com/index.html,因为下面html会被缓存。
location ^~/(images|doc)/ {
#所有访问http://www.a.com/images/....或者http://www.a.com/doc/...都被缓存。保存24小时。
include /etc/nginx/conf.d/proxy.conf;
proxy_pass http://www.a.com;
proxy_cache cache_one;
#对不同的HTTP状态码设置不同的缓存名称
proxy_cache_key $host$uri$is_args$args;
#proxy_cache_key 指定了包含在缓存中的缓存关键字(默认情况下服务器的主机名并没有包含到缓存关键字中)
proxy_cache_valid 200 304 12h;
#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
expires 24h;
#设置过期时间为24H
}
location /login {
proxy_pass http://www.a.com;
include /etc/nginx/conf.d/proxy.conf;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
}
#访问http://www.a.com/login匹配这条规则。
location 里:
fastcgi_connect_timeout 300;
#指定连接到后端fastcgi的超时时间
fastcgi_send_timeout 300;
#向FastCGI 传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI 传送请求的超时时间。
fastcgi_read_timeout 300;
#接收FastCGI 应答的超时时间,这个值是指已经完成两次握手后接收FastCGI 应答的超时时间。
fastcgi_buffer_size 256k;
#指定读取FastCGI 应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,由于页面大小为32k,所以这里设置为32k。
fastcgi_buffers 2 256k;
#指定本地需要用多少和多大的缓冲区来缓冲FastCGI 的应答。
#定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓存;如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。一般这个值应该为站点中PHP脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“16 16k”、“4 64k”等。
fastcgi_busy_buffers_size 256k;
#这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffer_size的两倍。http://www.linuxidc.com/Linux/2010-08/27874.htm
fastcgi_temp_file_write_size 256k;
#在写入fastcgi_temp_path 时将用多大的数据块,默认值是fastcgi_buffer_size 的两倍。
#fastcgi_cache_path /tmp/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=2m;
#这个指令为FastCGI 缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。并指定的缓存名称TEST。
#这里最好是放在server段中来调用。如果在这里调用,会对其它站点产生混乱。
#fastcgi_cache TEST;
#开启FastCGI 缓存。个人感觉开启缓存非常有用,可以有效降低CPU 负载,并且防止502 错误。
#fastcgi_cache_valid 200 302 1h;
#fastcgi_cache_valid 301 1d;
#fastcgi_cache_valid any 1m;
#为指定的应答代码指定缓存时间,如上例中将200,302 应答缓存一小时,301 应答缓存1 天,其他为1 分钟。
#fastcgi_cache_min_uses 2;
#缓存在fastcgi_cache_path 指令inactive 参数值时间内的最少使用次数,如上例,如果在5 分钟内某文件1 次也没有被使用,那么这个文件将被移除。
#设置链接请求几次就被缓存
#fastcgi_cache_use_stale error timeout invalid_header http_500;
#不知道这个参数的作用,猜想应该是让nginx 知道哪些类型的缓存是没用的。
#以上为nginx 中FastCGI 相关参数
本文出自 “12208412” 博客,请务必保留此出处http://12218412.blog.51cto.com/12208412/1874154
nginx配置文件详解(1.8.1)