2.Nginx核心配置
本文最后更新于:2023年12月5日 晚上
官方帮助文档:http://nginx.org/en/docs/
中文帮助文档:http://tengine.taobao.org/nginx_docs/cn/docs/ 不是很全
语法:
指令必须分号结尾
内建变量由 nginx 模块引入,可直接饮用;自定义变量由用户使用 set 命令自定义
$variable_name 的形式饮用变量
配置文件结构
主配置文件 nginx.conf,包括四部分
配置项说明
说明:在文档中,每个配置项都有详细的说明
范例:user 配置项,只能用于全局配置中
语法: user user [group];
默认值: user nobody nobody;
上下文: main
范例:charset 配置项,可以用于 http、server、location 配置中
语法: charset charset | off;
默认值: charset off;
上下文: http, server, location, if in location
全局配置
上下文是 main,全局生效,包括事件驱动相关配置
http 配置
商业版本的 nginx 中,可以自定义 nginx 的名称,免费的社区版本不支持,但是可以通过修改源码自定义:
核心配置示例
ngx_http_core_module
基于不同的 IP、端口、域名实现不同的虚拟主机,依赖于核心模块:ngx_http_core_module
location 语法
一个 server 中可以配置多个 location
精确匹配 =
通常用于匹配相对固定的 url
区分大小写的正则匹配 ~
不区分大小写的正则匹配 ~*
匹配 URI 开始 ^~
通常用于匹配目录,注意:不支持正则
匹配的优先级:=、^、、~*、/
作为上传服务器
以下指令控制上传数据
范例:
将上传的文件进行 hash 取值,例如 hash 值为:95f6f65f498c74938064851b1bb963d4,因为设置 1 2 2,所以从后往前去分截取 1、2、2 位,即 4、3d、96,最终的目录名称就是把 16 进制转换为十进制后的数字,即:
ngx_http_access_module
访问控制,可以通过匹配客户源 ip 地址进行限制
注意:如果能在防火墙设备进行控制,最好就不要在 nginx 上配置,可以更好的节约资源
范例:
ngx_http_auth_basic_module
提供账户认证功能,某些网页例如状态页需要通过认证才能访问
ngx_http_autoindex_module
ngx_http_autoindex_module 模块处理以斜杠字符 “/“ 结尾的请求,并生成目录列表,可以做为下载服
务配置使用
范例:实现下载站点
error_page
定义错误页面
语法: error_page code … [=[response]] uri;
默认值: —
上下文: http, server, location, if in location
范例:
如果处理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
范例:
第一个参数是错误日志路径,如果设置为特殊值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 错误。
范例:
其他配置
针对行为异常的浏览器关闭长连接功能:
语法: 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
方法异步 I/O:
范例:
缓存:
nginx 可以缓存以下三种信息:
- 文件元数据:文件的描述符、文件大小和最近一次的修改时间
- 打开的目录结构
- 没有找到的或者没有权限访问的文件的相关信息
范例: