nginx配置文件详解

Posted by 撒得一地 on 2016年9月24日 in 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]\.";  

上一篇:

下一篇:

相关推荐

网站地图|XML地图

Copyright © 2015-2024 技术拉近你我! All rights reserved.
闽ICP备15015576号-1 版权所有©psz.