nginx配置文件详解
下一篇: nginx配置访问密码,让用户输入用户名密码才能访问
首先,一份比较完整的 nginx 配置文件可以参考:nginx基本配置与参数说明。
主模块常用指令
daemon 含义:设置是否以守护进程模式运行 语法:daemon on|off 缺省:on 示例:daemon off 注意:生产环境(production mode)中不要使用daemon指令,这些选项仅用于开发测试(development mode)。
debug_points 含义:断点调试 语法:debug_points [stop|abort] 缺省:none 示例:debug_points stop; 注意:在Nginx内有一些assert断言,这些断言允许Nginx,配合调试器中断程序运行、停止或创建core文件。
master_process 含义:设置是否启用主进程 语法:master_process on|off 缺省:on 示例:master_process off; 注意: 不要在生产环境(production mode)中使用master_process指令,这些选项仅用于开发测试(development mode)。
error_log 含义:指定错误日志文件 语法:error_log file [debug|info|notice|warn|error|crit] 缺省:${prefix}/logs/error.log 示例: error_log /data/nginx/logs/error.log debug 注意: 该命令并非只有在测试(或称为开发)模式下才可以使用,而是在编译时添加了--with-debug参数时,则可以使用error_log指令的额外参数,即: error_log file [debug_core|debug_alloc|debug_mutex|debug_event|debug_http|debug_imap];
include 含义:指定所要包含的Nginx配置文件 语法:include <file|*> 缺省:none 示例:include vhosts/*.conf 或 include /home/michael/nginx/conf/nginx-main.conf 注意: (1)include命令可以指定包含一个文件,比如第二个示例。也可以指定包含一个目录下的所有文件, 比如第一个示例。 (2)指定的文件路径的基路径,由编译选项--prefix决定,如果编译时没有指定, 则默认的路径是/usr/local/nginx。
pid 含义:指定存储进程ID(即PID)的文件。 语法:pid <file> 缺省:compile-time option Example 示例:pid /var/log/nginx.pid; 注意:可以使用命令kill -HUP cat /var/log/nginx.pid\ 对Nginx进行进程ID文件的重新加载。
user 含义:指定可以使用Nginx的用户 语法:user <user> [group] 缺省:nobody nobody(第一个nobody是user,第二个nobody是group) 示例:user spd spdev;
worker_processes 含义:指定worker进程数 语法:worker_processes <number> 缺省:1 示例:worker_processes 4; 注意:最大用户连接数=worker进程数×worker连接数,即max_clients=worker_processes*worker_connections。
worker_cpu_affinity 含义:为worker进程绑定CPU。 语法:worker_cpu_affinity cpumask [cpumask...] 缺省:none 示例: (1)如果有4个CPU,并且指定4个worker进程,则: worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000; (2)如果有4个CPU,并且指定2个worker进程,则: worker_processes 2; worker_cpu_affinity 0101 1010; 注意:只有Linux平台上才可以使用该指令。
worker_rlimit_nofile 含义:worker进程的file descriptor可以打开的最大文件数,最好与与ulimit -n的值保持一致。 语法:worker_rlimit_nofile <number>;
事件模块(events)常用指令
use 语法:use [kqueue | rtsig | epoll | /dev/poll | select | poll | eventport]; 注意:如果在./configure的时候指定了不止一种事件模型,那么可以设置其中一个,告诉Nginx使用哪种事件模型。默认情况下,Nginx会在./configure时找出最适合系统的事件模型。
worker_connections 语法:worker_connection <number>; 最大连接数的计算公式如下: max_clients = worker_processes * worker_connections;
accept_mutex 含义:设置是否使用连接互斥锁进行顺序的accept()系统调用。 语法:accept_mutex <on|off>; 缺省:on 示例:accept_mutex off;
accept_mutex_delay 含义:设置获得互斥锁的最少延迟时间。 语法:accpet_mutex_delay <number of millisecs> 缺省:500ms 示例:accpet_mutex_delay 1000ms;
debug_connection 含义:设置指定的clients产生debug日志。 语法:debug_connection [ip|CIDR]; 缺省:none 示例:debug_connection 172.16.44.96; 一段较完整的事件模块代码如下: error_log /data/nginx/log/error.log; events { debug_connection172.16.44.96; }
HTTP模块常用指令
alias 含义:指定location使用的路径,与root类似,但不改变文件的跟路径,仅适用文件系统的路径。 语法:alias <file-path | directory-path> 缺省:N/A 作用域:http.server.location 示例: location /i/ { alias /home/michael/web/i/; } 则请求 /i/logo.png 则返回 /home/michael/web/i/logo.png。 注意: (1)替换路径时,可以使用变量。 (2)alias无法在正则的location中使用。如果有这种需求,则必须使用rewrite和root。
client_body_in_file_only 含义:指定是否将用户请求体存储到一个文件里。 语法:client_body_in_file_only <on | off> 缺省:off 作用域:http.server.location 示例:client_body_in_file_only on; 注意: (1)该指令为on时,用户的请求体会被存储到一个文件中,但是请求结束后,该文件也不会被删除; (2)该指令一般在调试的时候使用。
client_body_buffer_size 含义:指定用户请求体所使用的buffer的最大值 语法:client_body_buffer_size <size> 缺省:两个page的大小,一般为8k或16k 作用域:http.server.location 示例:client_body_buffer_size 512k; 注意:如果用户请求体超过了buffer的大小,则将全部内容或部分内容存储到一个临时文件中。
client_body_temp_path 含义:设置存储用户请求体的文件的目录路径 语法:client_body_temp_path <directory path> [level1 | level2 | level3] 作用域:http.server.location 示例:client_body_temp_path /spool/nginx/client_temp 1 2;
client_body_timeout 含义:设置用户请求体的超时时间。 语法:client_body_timeout <time> 作用域:http.server.location 示例:client_body_timeout 120s; 注意:只有请求体需要被1次以上读取时,该超时时间才会被设置。且如果这个时间后用户什么都没发, nginx会返回requests time out 408.
client_header_buffer_size 含义:设置用户请求头所使用的buffer大小 语法:client_header_buffer_size <size> 缺省:1k 作用域:http.server 示例:client_header_buffer_size 2k; 注意: (1)对绝大多数请求来说,1k足以满足请求头所需的buffer; (2)对于携带有较大cookie或来自于wap用户的请求头来说,1k的buffer一般不够,这时可以使用指令large_client_header_buffers。
client_header_timeout 含义:设置用户请求头的超时时间。 语法:client_header_timeout <time> 缺省:1m 作用域:http.server.location 示例:client_header_timeout 3m; 注意:只有请求头需要被1次以上读取时,该超时时间才会被设置。且如果这个时间后用户什么都没发,nginx会返回requests time out 408.
client_max_body_size 含义:设置所能接收的最大请求体的大小 语法:client_max_body_size <size> 缺省:1m 作用域:http.server.location 示例:client_max_body_size 2m; 注意:根据请求头中的Content-Length来判断请求体大小是否允许。如果大于设定值,则返回“ Request Entity Too Large”(413)错误。不过要注意的是,浏览器一般并不对这个错误进行特殊显示。
send_timeout 含义:指定响应客户端的超时时间,单位:秒,默认值为60 语法:send_timeout <time>
keepalive_timeout 含义:保持连接时间,单位:秒,超过该时间,服务器会关闭连接
tcp_nopush 含义:用于控制TCP链接是否推送,默认值是on
tcp_nodelay 含义:用于控制TCP链接是否延迟,默认值是on,将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞
HTTP模块Location相关指令
基本语法 语法:location [= | ~ | ~* | ^~] </uri/> {...} 缺省:N/A 作用域:server 匹配规则
1. 四种匹配方式
= 精确匹配
~ 大小写敏感正则匹配
~* 大小写不敏感正则匹配
^~ 前缀匹配
2. location匹配指令的执行顺序
首先:= 精确匹配;
其次:^~ 前缀匹配;
再次:~* 和 ~ 正则匹配,顺序依据出现顺序;
最后:如果出现正则匹配成功,则采用该正则匹配;如果无可匹配正则,
则采用前缀匹配结果。
如:
location = / { # 只匹配"/".}
location / {
# 匹配任何请求,因为所有请求都是以"/"开始
# 但是更长字符匹配或者正则表达式匹配会优先匹配
}
location ^~ /images/ {
# 匹配任何以 /images/ 开始的请求,并停止匹配其它location
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配以 gif, jpg, or jpeg结尾的请求.
# 但是所有 /images/ 目录的请求将由上面localtion处理.
}
压缩(gzip)模块相关指令
gzip(GNU-ZIP)是一种压缩技术。经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样, 用户浏览页面的时候速度会块得多。gzip的压缩页面需要浏览器和服务器双方都支持,实际上就 是服务器端压缩,传到浏览器后浏览器解压并解析。浏览器那里不需要我们担心,因为目前的巨 大多数浏览器都支持解析gzip过的页面。Nginx的压缩输出有一组gzip压缩指令来实现。相关指 令位于http{….}两个大括号之间。
gzip on
该指令用于开启或关闭gzip模块(on/off)
gzip_min_length 1k
设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。 默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。
gzip_buffers 4 16k
设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位, 安装原始数据大小以16k为单位的4倍申请内存。
gzip_http_version 1.1
识别http的协议版本(1.0/1.1)
gzip_comp_level 2
gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)
gzip_types text/plain application/x-javascript text/css application/xml
匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。
gzip_vary on
和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
gzip_disable “MSIE [1-6].”
指定版本浏览器不压缩
二、实际应用中配置实例
nginx.conf部分配置
#user nobody;
worker_processes 48;
worker_rlimit_nofile 1024;
error_log logs/error.log notice;
#pid logs/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
# HTTP服务配置
http {
include common.conf;
此处nginx.conf中include了common.conf,其中common.conf中配置了http模块中公用信息
common.conf部分配置
include mime.types;
default_type application/octet-stream;
log_format main '|$remote_addr|- |$http_cookie| – |$remote_user| [$time_local]| '
'"$request" |$status| $body_bytes_sent| "$http_referer"| '
'|"$http_user_agent"| |"$http_x_forwarded_for"|';
#access_log off
access_log logs/access.log main buffer=32K;
server_tokens off;
client_max_body_size 20m;
client_header_buffer_size 32K;
large_client_header_buffers 4 32K;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
client_header_timeout 30;
client_body_timeout 30;
send_timeout 30;
keepalive_timeout 65;
# HttpGzip模块配置
include gzip.conf;
此处common.conf中include了gzip.conf,其中gzip.conf中配置了HttpGzip模块中公用信息
其中gzip.conf部分配置
# HttpGzip模块配置,这个模块支持在线实时压缩输出数据流
gzip on;
gzip_min_length 1k;
gzip_proxied any;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 1;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
下一篇: nginx配置访问密码,让用户输入用户名密码才能访问