Nginx配置文件详解
... #,配置影响nginx全局的指令 { #配置影响nginx服务器或与用户的网络连接 ... } http { #配置代理,缓存,日志定义等和第三方模块的配置 ... # { #配置虚拟主机的相关参数,可以嵌套多个server ... #当前server全局配置项 [PATTERN]{ #配置请求的路由及各种请求的处理 ... } } } bakend { upstream集群负载均衡定义块 ... }
全局块
user www www; #定义Nginx运行的用户和用户组worker_processes 8; #nginx进程数,建议设置为等于CPU总核心数。error_log /var/logs/error.log [debug|info|notice|warn|error|crit]; #全局错误日志定义类型pid /var/nginx.pid; #进程pid文件worker_rlimit_nofile 65535; #一个nginx进程的最多打开文件描述符数理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。</pre><h2><a name="events"></a>events块</h2><pre>use epoll; #nginx针对不同的操作系统,有不同的事件模型 epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型 select、poll属于标准事件模型,如果当前系统不存在更有效的模型,nginx会选择select或poll
accept_mutex on; #设置网路连接序列化,防止惊群现象发生
multi_accept off; #一个进程是否同时接受多个网络连接
worker_connections 65535; #单个进程最大连接数
keepalive_timeout 60; #keepalive超时时间。
client_header_buffer_size 4k; #客户端请求头部的缓冲区大小,一般设置为系统分页大小的整数倍
open_file_cache max=65535 inactive=60s; #为打开文件指定缓存,默认没有启用,max指定缓存数量,建议和打开文件描述符数一致,inactive是指经过多长时间文件没被请求后删除缓存
open_file_cache_valid 80s; #指定多长时间检查一次缓存的有效信息,使用字段:http, server, location
open_file_cache_min_uses 1; #open_file_cache指令中指定时间范围内缓存文件最小打开数量,使用字段:http, server, location
open_file_cache_errors off; #指定是否在搜索一个文件是记录cache错误,使用字段:http, server, location
http全局配置项
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
charset utf-8; #默认编码
log_format name string; # 自定义访问日志格式
server_names_hash_bucket_size 128; #服务器名字的hash表大小
client_header_buffer_size 32k; #客户端请求头的缓冲区大小,一般设置为系统分页大小的整数倍
large_client_header_buffers 4 64k; #客户请求头缓冲大小。默认会用client_header_buffer_size来读取header值,如果header过大,会使用large_client_header_buffers来读取
client_max_body_size 8m; #设定最大通过nginx上传文件的大小
sendfile on; #是否开启高效文件传输模式指定nginx是否调用sendfile函数来输出文件,对于普通应用设为on 如果进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载 注意:如果图片显示不正常把这个改成off。
autoindex off; #开启目录列表访问,默认关闭
autoindex_exact_size on; #是否显示出文件的确切大小,单位是bytes,默认on,改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime off; #是否显示的文件时间为GMT时间,默认off,改为on后,显示的文件时间为所在服务器时间
tcp_nopush on; #是否允许使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
tcp_nodelay on;
keepalive_timeout 120; #长连接超时时间,单位是秒
client_body_in_file_only on:是否将post过来的数据记录到文件中用来分析
client_body_temp_path:设置post数据文件的临时目录,可以设置最多3层目录gzip模块设置
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; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型
gzip_vary on;auth_basic [ text|off ] #用于HTTP基本认证的开启和提示语,默认off,作用域http,server,location
auth_basic_user_file user_pwd_file; #为HTTP基本认证指定用户名密码文件,文件格式类似于下面的内容:用户名:密码 用户名2:密码2:注释 用户名3:密码3 密码必须使用函数crypt(3)加密
limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
server块
listen 80; #监听端口
listen 443 ssl; #同时监听443端口并打开ssl
ssl on; #listen 443后面添加ssl等同于该行配置
server_name domain1 domain2 ...; #绑定域名,可以有多个,用空格隔开
index index.php index.html index.htm; #默认主页文件
root /www/; #网站根目录
expires n[s|m|h|d]|epoch|max|off; #页面缓存,设置响应头的Expires和Cache-Controln[s|m|h|d]:设置缓存时间为当前系统时间加上设定值 epoch指定Expires的值为1970.1.1 00:00:01 #max表示Expires为2037年12月31日23:59:59,Cache-Control为10年 参数off禁止修改应答头中的Expires和Cache-Control
keepalive_requests 120; #单连接请求上限次数
access_log "path/logs/access.log" name; #使用name指定格式保存访问日志
access_log off; #关闭访问日志功能,一般在location块中使用
error_page code path/code_file; # 指定返回状态码code的返回内容
add_header option value; #添加指定的响应头
server_tokens off; #禁止在响应头中出现服务器版本
ssl_certificate "path/file.crt"; #指定SSL证书
ssl_certificate_key "path/file.key"; #指定ssl证书密钥
ssl_protocols TLSv1.1 TLSv1.2; #SSL使用的协议
ssl_ciphers "passwd" #ssl密码
ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;#指定支持的和不支持的加密套件
ssl_prefer_server_ciphers on; #ssl首选服务器密码
ssl_session_timeout 5m; #ssl会话超时
ssl_session_cache shared:SSL:10m; #ssl会话缓存error_page err_codes err_file; #请求错误指定错误显示内容rewrite PATTERN replacement [flag]; #url地址重定向
client_max_body_size 1m; #客户端请求数据最大值(如上传大文件)超过指定大小报错413 Request Entity Too Large
client_body_buffer_size 128k; #客户端请求数据最大内存占用大小
请求数据小于该值数据直接保存到内存中 请求数据大于该值小于client_max_body_size值则把请求数据保存到client_body_temp_path设置的临时目录中
allow/deny address | CIDR | unix: | all
表示允许/拒绝某个ip或ip段访问;值为'unix:'表示允许socket的访问 在nginx中,allow和deny的规则是按顺序执行的 location ~ admin { allow 192.168.0.0/24; allow 110.21.33.121; deny all; } 访问uri中包含admin的请求,允许192.168.0.0/24网段和110.21.33.121这个IP请求,其他来源IP全部拒绝</pre><h2><a name="location"></a>location块</h2>location区段指令为匹配指定规则的请求uri(不包含查询字符串)单独配置配置项
location [= | ~ | ~* | ^~ | @] /uri/ { configuration } =表示精确匹配,只有完全匹配才能生效。 ^~表示普通字符串匹配上以后不再进行正则匹配。 ~表示区分大小写的正则匹配。 ~*表示不区分大小写的正则匹配。 不带任何修饰符,表示前缀匹配。 location / 通用匹配,匹配任何未匹配到其他location的请求。 @表示一个自定义的location,这些区段客户段不能访问,只可以由内部产生的请求来访问location匹配的优先级(与location在配置文件中的顺序无关):=精确匹配会第一个被处理。匹配后nginx停止搜索其他location指令 ^~只匹配该规则,匹配后nginx停止搜索其他location指令 其他匹配按匹配长度最长匹配(后面更长的匹配会覆盖前面较短的匹配)location指令中常用配置指令1、alias别名配置,将location匹配到的URL路径指向alias指定(目录结尾一定要有反斜杠)的路径
location /test/ { alias /usr/local/; } 请求/test/1.jpg,会返回文件/usr/local/1.jpg 在正则匹配的location内如果含捕获语句,alias配置中也要引用这些捕获值: location ~* /img/(.+.(gif|png|jpeg)) { alias /usr/local/images/$1; }2、root根路径配置:将location匹配到的URL路径的根目录指向root配置的路径如:location /test/ { root /usr/local/; } 请求/test/1.jpg,将会返回文件/usr/local/test/1.jpg3、反向代理配置:将请求转发到指定的URL,详细配置项点击查看4、正向代理配置:将收到请求转发到后台服务器处理,通过ngx_http_fastcgi_module模块实现,可用位置:location,if in location
fastcgi_pass address; #转发到后台的fastcgi服务器地址 fastcgi_index names; #fastcgi默认的主页文件,多个使用空格隔开 fastcgi_param parameter value [if_not_empty]; #设置传递给fastcgi服务器的头字段 #其他相关参数,可以改善网站的性能,减少资源占用,提高访问速度。 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;5、stub_status on:用于查看Nginx的一些状态信息location /nginx_status { stub_status on; access_log off; } 浏览器访问http[s]://domain/nginx_status会显示Nginx的一些状态信息,返回各数据项说明: Active connections: 6 #表示当前nginx正在处理的活动连接数为6 Server accepts handled requests request_time 13057 13057 11634 2230854 nginx总共处理了13057个连接,成功创建了13057次握手(证明中间没有失败的) 总共处理了11634个请求,总共请求时间2230854 Reading: nginx读取到客户端的Header信息数 Writing: nginx返回给客户端的Header信息数 Waiting: 开启keep-alive的情况下,这个值等于 active – (reading + writing) 意思就是nginx已经处理完成,正在等候下一次请求指令的驻留连接。 所以,在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的 如果reading +writing数较多,则说明并发访问量非常大,正在处理过程中upstream块
upstream用于配置集群负载均衡1、根据指定条件轮询
upstream bakend { [ip_hash;] server host1:port1 [option ...]; server host2:port2 [option ...]; ... } bakend:表示为该集群负载均衡配置起一个名字,供后面的proxy_pass http://backend指令使用 ip_hash:表示每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题 每个设备的状态(option)可以为: down:表示当前server暂时不参与负载 weight=1:指定轮询几率,weigth表示权值,权值越高被分配到的几率越大 max_fails=1:指定允许请求失败的次数,超过后临时设置该server状态为down fail_timeout=30s:指定max_fails次失败后,设置该server状态为down的时间 backup:其它所有的非backup机器down或者忙的时候,才请求backup机器。这台机器压力会最轻2、fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配upstream backend { server server1; server server2; fair; }3、url_hash(第三方),按访问url的hash结果来分配,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效upstream backend { server server1; server server2; hash $request_uri; hash_method crc32; } 如果使用了hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法