2.Nginx核心配置
官方帮助文档:http://nginx.org/en/docs/
中文帮助文档:http://tengine.taobao.org/nginx_docs/cn/docs/ 不是很全
语法:
指令必须分号结尾
内建变量由 nginx 模块引入,可直接饮用;自定义变量由用户使用 set 命令自定义
$variable_name 的形式饮用变量
配置文件结构
主配置文件 nginx.conf,包括四部分
1 | # 1.main: 主配置段,即全局配置段,对http和mail都有效 |
配置项说明
说明:在文档中,每个配置项都有详细的说明
范例:user 配置项,只能用于全局配置中
语法: user user [group];
默认值: user nobody nobody;
上下文: main
范例:charset 配置项,可以用于 http、server、location 配置中
语法: charset charset | off;
默认值: charset off;
上下文: http, server, location, if in location
全局配置
上下文是 main,全局生效,包括事件驱动相关配置
1 | user www www; |
http 配置
1 | http { |
1 | http { |
商业版本的 nginx 中,可以自定义 nginx 的名称,免费的社区版本不支持,但是可以通过修改源码自定义:
1 | server_tokens on:修改 src/core/nginx.h 修改第13-14行,如下示例 |
核心配置示例
ngx_http_core_module
基于不同的 IP、端口、域名实现不同的虚拟主机,依赖于核心模块:ngx_http_core_module
location 语法
一个 server 中可以配置多个 location
精确匹配 =
通常用于匹配相对固定的 url
1
2
3
4location = /logo.jpg {
root /data/nginx/images;
index index.html;
}区分大小写的正则匹配 ~
1
2
3
4location ~ .*\.(js|css)?$ {
expires 7d;
access_log off;
}不区分大小写的正则匹配 ~*
1
2
3
4# 注意:这里只是对img不分区大小写,img、imG都会被匹配到,但是具体到文件,还是区分大小写的
location ~* /img {
alias /images;
}匹配 URI 开始 ^~
通常用于匹配目录,注意:不支持正则
1
2
3
4location ^~ /images {
root /data/nginx/;
index index.html;
}
匹配的优先级:=、^、、~*、/
作为上传服务器
以下指令控制上传数据
1 | # 允许客户端上传单个文件的最大值,默认值为1m,上传文件超过此值会出413错误 |
范例:
1 | client_max_body_size 100m; # 如果php上传,还需要修改php.ini的相关配置 |
将上传的文件进行 hash 取值,例如 hash 值为:95f6f65f498c74938064851b1bb963d4,因为设置 1 2 2,所以从后往前去分截取 1、2、2 位,即 4、3d、96,最终的目录名称就是把 16 进制转换为十进制后的数字,即:
1 | /data/nginx/client_body_temp/ |
ngx_http_access_module
访问控制,可以通过匹配客户源 ip 地址进行限制
注意:如果能在防火墙设备进行控制,最好就不要在 nginx 上配置,可以更好的节约资源
范例:
1 | location = /login/ { |
ngx_http_auth_basic_module
提供账户认证功能,某些网页例如状态页需要通过认证才能访问
ngx_http_autoindex_module
ngx_http_autoindex_module 模块处理以斜杠字符 “/“ 结尾的请求,并生成目录列表,可以做为下载服
务配置使用
1 | autoindex on | off; # 自动文件索引功能,默认为off |
范例:实现下载站点
1 | location /download { |
error_page
定义错误页面
语法: error_page code … [=[response]] uri;
默认值: —
上下文: http, server, location, if in location
范例:
1 | error_page 404 /404.html; |
如果处理uri
产生了错误,那么 nginx 将最后一次出错的 HTTP 响应状态码返回给客户端。
error_log
语法: error_log file | stderr [debug | info | notice | warn | error | crit | alert | emerg];
默认值: error_log logs/error.log error;
上下文: main, http, server, location
范例:
1 | error_log /data/wwwlogs/error_nginx.log crit; |
第一个参数是错误日志路径,如果设置为特殊值stderr
,nginx 会将日志输出到标准错误输出。
第二个参数是日志级别,debug 到 emerg 严重性由轻到重,如果要设置为 debug,编译时需要添加--with-debug
编译选项。
try_files
语法: try_files file … uri;
try_files file … =code;
默认值: —
上下文: server, location
内置变量 $uri 和 $request_uri:
如果用户请求的完整 url:http://s1.lujinkai.cn/www/nav/v1/index.html#/nav
- $uri:/www/nav/v1,不包含?和#等参数
- $request_uri:/www/nav/v1/index.html#/nav,包含?和#等参数
try_files 会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部 URI 的指向。最后一个参数是回退 URI 且必须存在,否则会出现内部 500 错误。
范例:
1 | location / { |
其他配置
针对行为异常的浏览器关闭长连接功能:
语法: keepalive_disable none | browser …;
默认值: keepalive_disable msie6;
上下文: http, server, location限制客户端使用除了指定的请求方法之外的其它方法:
语法: limit_except method … { … }
默认值: —
上下文: locationmethod :
GET
、HEAD
、POST
、PUT
、DELETE
、MKCOL
、COPY
、MOVE
、OPTIONS
、PROPFIND
、PROPPATCH
、LOCK
、UNLOCK
或者PATCH
。 指定method
为GET
方法的同时,会自动添加HEAD
方法1
2
3
4
5
6# 除了GET和HEAD 之外其它方法仅允许192.168.1.0/24网段主机使用
limit_except GET {
allow 192.168.1.0/32;
deny all;
}
```异步 I/O:
1
2
3
4# 是否开启异步I/O功能,如果开启,编译时需要加入--with-file-aio
aio on | off;
# 如果开启aio,必须同时开启directio,否则读取将是阻塞的,注意打开了directio则自动关闭sendfile
directio size | off;范例:
1
2
3
4
5
6location /video/ {
aio on;
directio 512;
# 从磁盘读取响应的缓冲区的数量和大小。默认1 32k
output_buffers 1 128k;
}缓存:
nginx 可以缓存以下三种信息:
- 文件元数据:文件的描述符、文件大小和最近一次的修改时间
- 打开的目录结构
- 没有找到的或者没有权限访问的文件的相关信息
1
2
3
4
5
6
7
8# 是否缓存打开过文件信息,默认off
# max:可缓存的缓存项上限数量;
# inactive:缓存项的非活动时长在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses指令所指定的次数的缓存项即为非活动项,将被删除
open_file_cache off | max=N [inactive=time];
open_file_cache_valid time; # 缓存项有效性的检查验证频率,默认值为60s
open_file_cache_errors on | off; # 是否缓存查找时发生错误的文件一类的信息,默认值为off
open_file_cache_min_uses number; # open_file_cache指令的inactive参数指定的时长内,至少被命中几数方可被归类为活动项,默认值为1范例:
1
2
3
4open_file_cache max=10000 inactive=60s; # 最大缓存10000个文件,非活动数据超时时长60s
open_file_cache_valid 60s; # 每间隔60s检查一下缓存数据有效性
open_file_cache_min_uses 5; # 60秒内至少被命中访问5次才被标记为活动数据
open_file_cache_errors on; # 缓存错误信息