首页 > 代码库 > nginx配置文件大解析
nginx配置文件大解析
配置文件的主要组成部分:
1) main配置段
2) http {
}
3) mail
配置指令要以分号结尾,语法格式:directive valuel [value2...];
支持使用变量:
1)模块内置变量;
2)自定义变量;set var_name value
主配置段的指令的类别:
1)用于调试、定位问题
2)正常运行必备的配置
3)优化性能的配置
4)事件相关的配置
正常运行的必备配置:
1、user USERNAME [GROUPNAME];
指定运行worker进程的用户和组
2、pid /path/to/pid_file;
指定nginx的pid文件;
3、worker_rlimit_nofile #;
指定一个worker进程所能够打开的最大文件句柄数;
4、worker_rlimit_sigpending #;
指定每个用户能够发往worker的信号的数量;
优化性能相关的配置:
1、worker_processes #:
worker线程的个数;通常应该为物理CPU核心个数减1;
2、worker_cpu_affinity cpumask ...;
绑定worker进程至指定的CPU上;
CPUMASK:0001;0010;0100;1000
例如:worker_cpu_affinity 00000001 00000010 00000100;
3、timer_resolution t;
gettimeofday();
该配置指令允许用户减少调用gettimeofday()的次数
4、worker_priority nice;[-20, 19]
配置项用于设置Nginx worker进程的nice优先级
事件相关的配置 : 1、accept_mutex [on|off]
内部调用用户 请求至各worker时用的负载均衡锁;打开时表示能让多个worker轮流地、序列化地与响应新请求;
2、lock_file /path/to/lock_file;
锁文件的位置
3、accept_mutex_delay #ms;
使用accept锁以后,只有一个worker能取得锁 ,一个worker进程为取得accept锁的等待市场,即用户建立等待的时间,如果某worker进程在某次试图取得锁时失败了,则至少要等#ms才能再一次请求锁
4、use [epoll|rgsig|select|poll];
定义使用的事件模型;建议让Nginx自动选择;
5、worker_connections #;
每个worker进程所能够响应的最大并发请求数;
用于调试、定位问题:
1、daemon [off|on]
是否以守护进程方式启动nginx;
2、master_process on|off;
是否以master/worker模型来运行nginx;
3、error_log /path/to/error_log level;
错误日志文件及其级别;出于调试的目的,可以使用debug级别,但此级别只有在编译nginx时使用了--with-debug选项才有效;
虚拟主机相关的配置:
1、server {}
定义一个虚拟主机;
2、listen
监听的端口
完整格式 :listen address[:port] [default_server] [ssl] [spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
简单语法格式:listen address[:port] [default_server] ssl
backlog=number: 指明TCP协议backlog队列的大小。默认为-1,表示不设置;
rcvbuf=size:设定监听句柄的SO_RCVBUF参数;
例如:listen 172.16.100.8:8080
3、server_name name [...];
后可跟多个主机名;名称还可以使用通配符和正则表达式(~);
(1) 先做精确匹配;www.magedu.com:
(2) 左侧通配符匹配,例如:*.magedu.com;
(3) 右侧通配符匹配,例如:www.*;
(4) 正则表达式匹配,例如: ~^.*\.magedu\.com$
(5) default_server
4、location [=|~|~*|^~] /uri {...}
location @name
功能:允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location块中的配置所处理;
=: 精确匹配检查;
~: 正则表达式模式匹配,区分字符大小写;
~*:正则表达式模式 匹配,不区分字符大小写;
^~:URI的前半部分匹配,不检查正则表达式;
匹配优先级:精确匹配(=)、^~、~和~*、由不带符号的URL进行左侧匹配;
5、root
设置web资源路径映射;用于指明请求的URL所对应的文档的根目录路径;
location /images/ { root "/web/imgs/"; }
6、alias path
用于location配置段,定义路径别名
location /images/ { alias /www/pictures/; }
注意:root表示指明路径为对应location的“ /” URL;alias表示路径映射,即location中的URL是相对于alias所指明的路径而言;
7、index file
默认主页面
index index.html;
8、error_page code [...] [=code] URI | @name
根据http状态码重定向错误页面
例如:error_page 404 /404.html
=[code]: 以指定的响应码进行响应;省略code表示以新资源的响应码为响应码;
9、try_files
try_files path1[,path2,...] URI
网络连接相关的配置:
1、keepalive_timeout time;
保持连接的超时时长,默认为75s;
2、keepalive_requests #;
在一次保持连接上允许承载最大资源请求数;
3、keepalive_disable [msie6|safari|none]
为指定类型的浏览器禁用长连接;
4、tcp_nodelay on|off
对长连接是否使用TCP_NODELAY选项;
5、client_header_timeout time;
读取http请求报文首部的超时时长;
6、client_body_timeout time;
读取http请求报文body部分的超时时长;
7、send_timeout time;
发送响应报文的超时时长;
对客户端请求进行限制:
1、limit_except METHOD {...}
指定对范围之外的其它方法的访问控制;
limit_except GET { allow 172.16.0.0/16; deny all; }
2、client_body_max_size SIZE;
限制请求报文中body部分的上限;通过检测请求报文首部中的"Content_Length"来判定;
3、limit_rate speed;
限制客户端每秒种传输的字节数,默认为0,表示无限制;
对内存或磁盘资源进行分配
1、client_body_in_file_only on|clean|off;
请求报文的body部分是否可暂存于磁盘;on表示允许,并且即使请求结束,也不会删除暂存的内容;clean表示会删除;off不允许暂存;
2、client_body_in_single_buffer on|off
默认值:off
使用字段:http, server, location
这个指令(0.7.58版本)指定是否将客户端连接请求完整的放入一个缓冲区,当使用变量$request_body时推荐使用这个指令以减少复制操作。如果无法将一个请求放入单个缓冲区,将会被放入磁盘。
3、client_body_buffer_size size;
默认值:8k/16k
使用字段:http, server, location
这个指令可以指定连接请求实体的缓冲区大小。如果连接请求超过缓存区指定的值,那么这些请求实体的整体或部分将尝试写入一个临时文件。默认值为两个内存分页大小值,根据平台的不同,可能是8k或16k。当请求头中的Content-Length字段小于指定的buffer size,那么Nginx将使用较小的一个,所以nginx并不总是为每一个请求分配这个buffer size大小的buffer。
4、client_body_temp_path DIR [level1 [level2 [level3 [level4]]]]
默认值:client_body_temp
使用字段:http, server, location
指令指定连接请求实体试图写入的临时文件路径。
可以指定三级目录结构,例如:client_body_temp_path /var/tmp/nginx/client 1 2
5、client_header_buffer_size size:
默认值:1k
使用字段:http, server
指令指定客户端请求头部的缓冲区大小;绝大多数情况下一个请求头不会大于1k;不过如果有来自于wap客户端的较大的cookie它可能会大于1k,Nginx将分配给它一个更大的缓冲区,这个值可以在large_client_header_buffers里面设置。
MIME类型相关的配置:
1、types {}
定义MIME types至文件的扩展名;
types { text/html .html; image/jpeg .jpg; }
2、default_type MIME-TYPE;
文件操作优化相关的配置:
1、sendfile on|off;
是否启用sendfile功能
2、aio on|off;
是否启用aio功能
3、directio size|off;
是否使用O_DIRECT选项去请求读取文件;与sendfile功能互斥;
4、open_file_cache max=N[inactive=time] | off;
nginx可以缓存以下三种信息:
(1) 文件句柄、文件大小和最近一次修改时间;
(2) 打开目录的目录结构;
(3) 没有找到的或者没有权限操作的文件的相关信息;
max=N表示可缓存的最大条目上限;一旦到达上限,则会使用LRU从缓存中删除最近最少使用的条目;
inactive=time: 在inactive指定的时长内没有被访问过的缓存条目就会淘汰;
5、open_file_cache_errors on|off;
是否缓存在文件缓存中缓存打开文件时出现找不到路径,没有权限等的错误信息;
6、open_file_cache_min_uses time;
每隔多久检查一次缓存中缓存条目的有效性;默认60s;
基于IP的访问控制 :
nginx限制客户端ip访问使用的模块是ngx_http_access_module,这个模块可以进行nginx限制客户端ip访问。nginx访问限制也可以用用户名密码认证来实现。同时限制客户端ip访问和需要用户名密码认证,需要使用指令statisfy;
可以在http, server, location中添加使用
allow, deny
基于用户的basic认证配置:
auth_basic
auth_basic_user_file
htpasswd命令创建用户账号文件;
基于gzip实现响应报文压缩:
1、gzip on; #开启gzip压缩输出
2、gzip_min_length 1k; #最小压缩文件大小
3、gzip_buffers 4 16k; #压缩缓冲区
4、gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
5、gzip_comp_level 2; #压缩等级
定制响应首部
add_header name value [always];
expires
定制访问日志
log_format
access_log
定义合法引用:
valid_referers none | blocked | server_names | string ...; if ($invalid_referer) { return 403 }
URL rewrite:
rewrite regex replacement [flag]; last break redirect permanent if (condition) { ... }
比较表达式: =; !=; ~; ~*; !~*; -f; -f; -d; !d; -e; !-e; -x; !-x
return: return code URL set $variable value
本文出自 “小二哥Linux” 博客,请务必保留此出处http://9612520.blog.51cto.com/9602520/1596465
nginx配置文件大解析