Nginx 的简单使用笔记
Nginx 简单使用笔记
Nginx 是一个轻量级的 Web 服务器 基础功能有反向代理, 邮件代理等, 同时其具有可高度定制的特点.
Nginx 有众多插件, 配合插件 Nginx 能实现直播等许多功能.
Nginx 的核心学习目标是它的配置文件 nginx.conf
配置文件
以下面的配置文件为例
配置文件中的配置是常用配置, 值有可能不是是默认值
1 | # 全局块 |
核心模块指令
查看所有指令解释
absolute_redirect
- 取值: on | off (默认 on)
- 可配置模块: http, server, location
- 解释: 重定向绝对地址
详细解释
aio
- 取值: on | off | threads[=pool] (默认 off)
- 可配置模块: http, server, location
- 解释: 异步文件 I/O
详细解释
aio_write
- 取值: on | off (默认 off)
- 可配置模块: http, server, location
- 解释: 当开启 aio 时指定是否将其用于写入文件
详细解释
alias
- 取值: 具体路径
- 可配置模块: location
- 解释: 将匹配的访问路径重新指定为新定义的文件路径. alias 指定的目录是 location 路径的实际目录,其所在 location 的 rewrite 指令不能使用 break 参数
详细解释
auth_delay
- 取值: 具体时间 (默认 0s)
- 可配置模块: http, server, location
- 解释: 当访问受密码、子请求结果或 JWT 限制的资源时,使用 401 响应代码延迟处理未经授权的请求,以防止计时攻击
详细解释
chunked_transfer_encoding
- 取值: on | off (默认 on)
- 可配置模块: http, server, location
- 解释: 在 HTTP/1.1 中禁用分块传输编码
详细解释
client_body_buffer_size
- 取值: 具体大小 (默认 16k)
- 可配置模块: http, server, location
- 解释: 用于读取客户端请求正文的缓冲区大小
详细解释
client_body_in_file_only
- 取值: on | clean | off (默认 off)
- 可配置模块: http, server, location
- 解释: 保存整个客户端请求正文到文件中
详细解释
client_body_in_single_buffer
- 取值: on | off (默认 off)
- 可配置模块: http, server, location
- 解释: 保存整个客户端请求正文在单个缓冲区中. 建议在使用变量时使用该指令, 以节省所涉及的复制操作数
详细解释
client_body_temp_path
- 取值: 具体路径 [级别[级别[级别]]]
- 可配置模块: http, server, location
- 解释: 定义用于存储保存客户端请求正文的临时文件的目录. 在指定的下最多可以使用三级子目录层次结构目录
详细解释
client_body_timeout
- 取值: 具体时间 (默认 60s)
- 可配置模块: http, server
- 解释: 读取客户端请求正文的超时时间
详细解释
client_header_buffer_size
- 取值: 具体大小 (默认 1k)
- 可配置模块: http, server
- 解释: 用于读取客户端请求标头的缓冲区大小
详细解释
client_header_timeout
- 取值: 具体时间 (默认 60s)
- 可配置模块: http, server
- 解释: 读取客户端请求标头的超时时间
详细解释
client_max_body_size
- 取值: 具体大小 (默认 1m)
- 可配置模块: http, server, location
- 解释: 客户端请求正文允许的最大大小, 设置为 0 为不限制
详细解释
connection_pool_size
- 取值: 具体大小 (默认 512)
- 可配置模块: http, server
- 解释: 准确调整每个连接的内存分配
详细解释
default_type
- 取值: mime.types 模块中的类型 (默认 text/plain)
- 可配置模块: http, server
- 解释: 定义响应的默认 MIME 类型
详细解释
directio
- 取值: 具体大小 | off (默认 off)
- 可配置模块: http, server, location
- 解释: 读取大于或等于设定大小的文件时, 允许使用 flag
详细解释
directio_alignment
- 取值: off | on if_not_owner [from=part] (默认 off)
- 可配置模块: http, server, location
- 解释: off: 允许和不检查路径名中的符号链接; on: 如果路径名的任何组件是符号链接, 对文件的访问被拒绝; if_not_owner, from: 参见详细解释
详细解释
error_page
- 取值: 错误码… [=[response]] URI
- 可配置模块: http, server, location
- 解释: 指定错误码对应的错误页
详细解释
etag
- 取值: on | off (默认 on)
- 可配置模块: http, server, location
- 解释: 启用或禁用 ETag 的自动生成的静态资源的响应标头字段
详细解释
http
if_modified_since
- 取值: off | exact | before (默认 exact)
- 可配置模块: http, server, location
- 解释: 对文件修改时间的服务端校验提供了两种不同的比对方式. 值为 exact 时, Nginx 会将请求头中 if_modified_since 的时间与响应数据中的时间做精确匹配, 即完全相等才认为客户端缓存有效, 返回响应状态码 304; 值为 before 时, 在请求头中 if_modified_since 的时间大于响应数据中的时间也认为客户端缓存有效, 返回响应状态码 304. 该指令功能控制处于数据流的出入口, 对于任何形式产生的响应数据都有效, 值为 off 时, 关闭 Nginx 对客户端缓存文件修改时间的服务端校验功能
详细解释
ignore_invalid_headers
- 取值: on | off (默认 on)
- 可配置模块: http, server
- 解释: 控制是否应忽略名称无效的标头字段
详细解释
internal
- 取值: 无
- 可配置模块: location
- 解释: 指定给定位置只能用于内部请求
详细解释
keepalive_disable
- 取值: none | browser …(默认 msie6)
- 可配置模块: http, server, location
- 解释: 禁用与行为异常的浏览器的保持活动连接
详细解释
keepalive_requests
- 取值: 具体数字 (默认 1000)
- 可配置模块: http, server, location
- 解释: 设置可以通过一个保持活动连接提供的最大请求数
详细解释
keepalive_time
- 取值: 具体时间 (默认 1h)
- 可配置模块: http, server, location
- 解释: 限制可以通过一个保持活动连接来处理请求的最长时间
详细解释
keepalive_timeout
- 取值: 具体时间 [header_timeout] (默认 75s)
- 可配置模块: http, server, location
- 解释: 第一个参数设置一个超时间, 在此期间客户端连接将在服务器端保持打开状态 (值 0 将禁用保持活动状态的客户端连接). 第二个可选参数设置在 “Keep-Alive: timeout=” 响应标头字段.
详细解释
large_client_header_buffers
- 取值: 具体数量 具体大小 (默认 4 8k)
- 可配置模块: http, server, location
- 解释: 对读取请求头设置最大数量和大小
详细解释
limit_except
- 取值: Http_method{…}
- 可配置模块: location
- 解释: 限制允许在某个位置内使用的 HTTP 方法
- 例子:详细解释
1
2
3
4limit_except GET { # 限制对除 GET 和 HEAD 之外的所有方法的访问
allow 192.168.1.0/32;
deny all;
}
limit_rate
- 取值: 具体速率 (默认 0, 单位 B/s)
- 可配置模块: http, server, location
- 解释: 限制每个连接向客户端传输响应的速率
详细解释
limit_rate_after
- 取值: 具体大小 (默认 0)
- 可配置模块: http, server, location
- 解释: 设置初始值, 在此之后进一步传输响应将受到速率限制
详细解释
lingering_close
- 取值: off | on | always (默认 on)
- 可配置模块: http, server, location
- 解释: 控制 nginx 关闭客户端连接的方式
详细解释
lingering_time
- 取值: 具体时间 (默认 30s)
- 可配置模块: http, server, location
- 解释: 当 lingering_close 生效时, 此指令指定 Nginx 处理 (读取和忽略) 来自客户端的其他数据的最长时间
详细解释
lingering_timeout
- 取值: 具体时间 (默认 5s)
- 可配置模块: http, server, location
- 解释: 当 lingering_close 生效时, 此指令指定更多客户端数据到达的最长等待时间
详细解释
listen
- 取值: 参见详细解释
- 可配置模块: server
- 解释: 参见详细解释
详细解释
location
log_not_found
- 取值: on | off (默认 on)
- 可配置模块: http, server, location
- 解释: 启用或禁用将有关未找到文件的错误记录到 error_log 中
详细解释
log_subrequest
- 取值: on | off (默认 off)
- 可配置模块: http, server, location
- 解释: 启用或禁用将子请求记录到 access_log
详细解释
max_ranges
- 取值: 具体值
- 可配置模块: http, server, location
- 解释: 限制字节范围请求中允许的最大范围数, 值 0 将禁用字节范围支持
详细解释
merge_slashes
- 取值: on | off (默认 off)
- 可配置模块: http, server
- 解释: 启用或禁用两个或多个相邻斜杠在 URI 中变成单个斜杠的压缩
详细解释
msie_padding
- 取值: on | off (默认 off)
- 可配置模块: http, server, location
- 解释: 启用或禁用向状态为 MSIE 客户端的响应添加注释
详细解释
msie_refresh
- 取值: max=N [inactive=time] | off (默认 off)
- 可配置模块: http, server, location
- 解释: 配置可存储以下内容的缓存
- 打开文件描述符,其大小和修改时间;
- 关于目录存在的信息;
- 文件查找错误
max: 设置缓存中的最大元素数; 在缓存溢出时,删除最近最少使用的 (LRU) 元素;
inactive: 定义从缓存中删除元素的时间 如果在此期间未被访问; 默认情况下,它是 60 秒;
off: 禁用缓存
详细解释
open_file_cache_errors
- 取值: on | off (默认 off)
- 可配置模块: http, server, location
- 解释: 按open_file_cache启用或禁用文件查找错误的缓存
详细解释
open_file_cache_min_uses
- 取值: 具体数值 (默认 1)
- 可配置模块: http, server, location
- 解释: 设置在 open_file_cache 指令的参数所配置的时间段内文件访问的最小次数
详细解释
open_file_cache_valid
- 取值: 具体时间 (默认 60s)
- 可配置模块: http, server, location
- 解释: 设置验证 open_file_cache 的时间
详细解释
output_buffers
- 取值: 具体数值 具体大小 (默认 2 32k)
- 可配置模块: http, server, location
- 解释: 设置用于从磁盘读取响应的缓冲区
详细解释
port_in_redirect
- 取值: on | off (默认 on)
- 可配置模块: http, server, location
- 解释: 启用或禁用在 Nginx 发出的绝对重定向中指定端口
详细解释
postpone_output
- 取值: 具体大小 (默认 1460, 单位 B)
- 可配置模块: http, server, location
- 解释: 配置客户端数据的传输将推迟到 Nginx 至少有一定数量的字节数据要发送. 值 0 将禁用延迟数据传输
详细解释
read_ahead
- 取值: 具体大小 (默认 0)
- 可配置模块: http, server, location
- 解释: 设置处理文件时内核的预读取量
详细解释
recursive_error_pages
- 取值: on | off (默认 off)
- 可配置模块: http, server, location
- 解释: 启用或禁用使用 error_page 指令执行多个重定向
详细解释
request_pool_size
- 取值: 具体大小 (默认 4k)
- 可配置模块: http, server, location
- 解释: 调整每个请求的内存分配大小
详细解释
reset_timedout_connection
- 取值: on | off (默认 off)
- 可配置模块: http, server, location
- 解释: 启用或禁用重置超时连接, 以及使用非标准代码 444 关闭的连接
详细解释
resolver
- 取值: address … [valid=time] [ipv4=on|off] [ipv6=on|off] [status_zone=zone]
- 可配置模块: http, server, location
- 解释: 配置用于解析上游服务器名称的名称服务器进入地址
详细解释
resolver_timeout
- 取值: 具体时间 (默认 30s)
- 可配置模块: http, server, location
- 解释: 设置 resolver 名称解析的超时时间
详细解释
root
- 取值: 具体时间 (默认 30s)
- 可配置模块: http, server, location
- 解释: 设置请求的根目录
详细解释
satisfy
- 取值: all | any (默认 any)
- 可配置模块: http, server, location
- 解释: access 阶段按照 access 模块, auth_basic 模块, auth_request模块, 其他模块执行顺序
all: access 阶段的所有模块都是通过, 才可以继续往下面执行。
any: 所有模块中任何一个验证通过就放行
详细解释
send_lowat
- 取值: 具体大小 (默认 0)
- 可配置模块: http, server, location
- 解释: 如果指令设置为非零值, Nginx 将尝试最小化 使用 kqueue 方法的任一标志对客户端套接字执行的发送操作数 或套接字选项.此指令在 Linux, Solaris 和 Windows 上将被忽略
详细解释
send_timeout
- 取值: 具体时间 (默认 60s)
- 可配置模块: http, server, location
- 解释: 设置向客户端传输响应的超时时间
详细解释
sendfile
- 取值: on | off (默认 off)
- 可配置模块: http, server, location
- 解释: 设置 sendfile 方式传输文件
详细解释
sendfile_max_chunk
- 取值: 具体大小 (默认 2m)
- 可配置模块: http, server, location
- 解释: 限制单词调用传输的数据量
详细解释
server
server_name
- 取值: name …
- 可配置模块: http
- 解释: 设置虚拟服务器的名称, 可使用正则表达式或通配符
详细解释
server_name_in_redirect
- 取值: on | off (默认 off)
- 可配置模块: http, server, location
- 解释: 启用或禁用在 Nginx 发送的绝对重定向中由 server_name 指令指定的主服务器名称的使用
详细解释
server_names_hash_bucket_size
- 取值: 具体大小 (默认取决于处理器高速缓存行大小 32 | 64 | 128)
- 可配置模块: http
- 解释: 设置服务器名称哈希表的存储空间大小
详细解释
server_names_hash_max_size
- 取值: 具体大小 (默认 512)
- 可配置模块: http
- 解释: 设置服务器名称哈希表的最大值
详细解释
server_tokens
- 取值: on | off | build | string (默认 on)
- 可配置模块: http, server, location
- 解释: 启用或禁用在错误页面上服务器响应标头字段
详细解释
subrequest_output_buffer_size
- 取值: 具体大小 (默认 4k 或者 8k)
- 可配置模块: http, server, location
- 解释: 设置用于存储子请求的响应正文的存储空间大小
详细解释
tcp_nodelay
- 取值: on | off (默认 on)
- 可配置模块: http, server, location
- 解释: 设置是否把小包组成成大包
详细解释
tcp_nopush
- 取值: on | off (默认 off)
- 可配置模块: http, server, location
- 解释: 启用或禁用 FreeBSD 或 Linux 上的套接字选项
详细解释
try_files
- 取值: file … (URL | =code)
- 可配置模块: server, location
- 解释: 按指定顺序检查文件是否存在并使用, 详情参见详细解释
详细解释
types
- 取值: {…} (默认值 )
1
2
3
4
5types {
text/html html;
image/gif gif;
image/jpeg jpg jpeg;
} - 可配置模块: server, location
- 解释: 将文件扩展名映射到 MIME 类型的响应
详细解释
types_hash_bucket_size
- 取值: 具体大小 (默认 64)
- 可配置模块: http, server, location
- 解释: 设置类型哈希表的存储空间大小
详细解释
types_hash_max_size
- 取值: 具体大小 (默认 1024)
- 可配置模块: http, server, location
- 解释: 设置最大类型哈希表
详细解释
underscores_in_headers
- 取值: on | off (默认 off)
- 可配置模块: http, server
- 解释: 启用或禁用在客户端请求标头字段中使用下划线
详细解释
variables_hash_bucket_size
- 取值: 具体大小 (默认 64)
- 可配置模块: http
- 解释: 设置变量哈希表的存储空间大小
详细解释
variables_hash_max_size
- 取值: 具体大小 (默认 1024)
- 可配置模块: http
- 解释: 设置变量哈希表的最大值
详细解释
嵌入式变量
查看所有嵌入式变量解释
$arg_name
请求行中的参数名称
$args
请求行中的参数
$binary_remote_addr
二进制形式的客户端地址, 值的长度始终为 4 个字节 (IPv4), 或 16 个字节 (IPv6)
$body_bytes_sent
发送到客户端的字节数,不计算响应标头; 此变量与 Apache 模块的 “” 参数兼容%Bmod_log_config
$bytes_sent
发送到客户端的字节数
$connection
连接序列号
$connection_requests
当前通过连接发出的请求数
$connection_time
连接时间 (以秒为单), 分辨率为毫秒
$content_length
Content-Length 请求标头字段
$content_type
Content-Type 请求标头字段
$cookie_name
Cookie 名称
$document_root
对于当前请求 root 或 alias 指令的值
$document_uri
同 $uri
$host
按以下优先级顺序:
- 请求行中的主机名,
- Host 请求标头字段中的主机名
- 与请求匹配的服务器名称
$hostname
主机名
$http_name
任意请求标头字段. 变量名称的最后一部分是转换后的字段名称改为小写且短划线替换为下划线
$https
如果连接不在 SSL 模式下运行该变量为空字符串
$is_args
求行有参数, 无参数时空字符串
$limit_rate
设置此变量可启用响应速率限制. 见limit_rate指令
$msec
当前时间(以秒为单位) 分辨率是毫秒
$nginx_version
Nginx 版本
$pid
worker 进程的 PID
$pipe
请求已通过管道传输
$proxy_protocol_addr
来自 PROXY 协议标头的客户端地址, 在侦听指令中必须事先通过设置参数来启用代理协议
$proxy_protocol_port
来自 PROXY 协议标头的客户端端口, 在侦听指令中必须事先通过设置参数来启用代理协议
$proxy_protocol_server_addr
来自 PROXY 协议标头的服务器地址, 在侦听指令中必须事先通过设置参数来启用代理协议
$proxy_protocol_server_port
来自 PROXY 协议标头的服务器端口, 在侦听指令中必须事先通过设置参数来启用代理协议
$proxy_protocol_tlv_name
来自代理协议标头的 TLV, 在侦听指令中必须事先通过设置参数来启用代理协议
name
name 取值可以是 TLV 类型名称或其数值以及 SSL TLV 类型名或其数值
SSL TLV类型名或其数值都以 ssl_ 开头
支持以下 TLV 类型名称
- alpn (0x01): 通过连接使用的上层协议
- authority (0x02): 客户端传递的主机名值
- unique_id (0x05): 唯一的连接 ID
- netns (0x30): 命名空间的名称
- ssl (0x20): 二进制 SSL TLV 结构
支持以下 SSL TLV 类型名称 - ssl_version (0x21): 客户端连接中使用的 SSL 版本
- ssl_cn (0x22): SSL 证书公用名
- ssl_cipher (0x23): 所用密码的名称
- ssl_sig_alg (0x24): 用于对证书进行签名的算法
- ssl_key_alg (0x25): 公钥算法
- ssl_verify: 客户端 SSL 证书验证结果 (如果客户端提供了证书) 并成功验证, 否则不为 0
$query_string
同 $args
$realpath_root
对于当前请求对应于根或别名指令值的绝对路径名, 将所有符号链接解析为真实路径
$remote_addr
客户地址
$remote_port
客户端端口
$remote_user
基本身份验证提供的用户名
$request
完整的原始请求行
$request_body
请求正文
$request_body_file
具有请求正文的临时文件的名称
$request_completion
请求未完成时为空字符串, 否则是 OK
$request_filename
当前请求的文件路径
$request_id
唯一请求标识符
$request_length
请求长度 (包括请求行、标头和请求正文)
$request_method
请求方法
$request_time
自从客户端读取第一个字节以来经过的请求处理时间 (以秒为单位), 分辨率为毫秒
$request_uri
完整的原始请求 URI(带参数)
$scheme
请求方案 (http 或 https)
$sent_http_name
任意响应标头字段 (变量名称的最后一部分是转换后的字段名称改为小写且短划线替换为下划线)
$sent_trailer_name
在响应结束时发送的任意字段 (变量名称的最后一部分是转换后的字段名称改为小写且短划线替换为下划线)
$server_addr
接受请求的服务器的地址 (计算此变量的值通常需要一次系统调用)
$server_name
接受请求的服务器的名称
$server_port
接受请求的服务器的端口
$server_protocol
请求协议 (通常是 HTTP/2.0 或 HTTP/1.0 或 HTTP/1.1)
$status
响应状态
$tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space
有关客户端 TCP 连接的信息
$time_iso8601
ISO 8601 标准格式的本地时间
$time_local
通用日志格式的本地时间
$uri
请求中的当前 URI,规范化的值可能会在请求处理过程中发生变化, 例如: 在执行内部重定向或使用索引文件时
location 匹配规则
路径匹配
location 后的地址是匹配规则, 可分为前缀和地址两部分, 例如 ~/(js|css)
中 ~
是前缀, /(js|css)
是正则表达式形式地址
前缀 | 解释 |
---|---|
缺省 | 通用匹配 |
~ | 匹配区分大小写正则表达式 |
~* | 匹配不区分大小写正则表达式 |
!~ | 不匹配区分大小写正则表达式 |
!~* | 不匹配不区分大小写正则表达式 |
= | 精确匹配 |
@ | 内部跳转 |
^~ | 普通字符串匹配上以后不再进行正则匹配 |
匹配优先级:
- 精确匹配 =
- 前缀匹配 ^~
- 按文件中顺序的正则匹配
- 匹配不带任何修饰的前缀匹配
- 交给 / 通用匹配
- 当有匹配成功时候, 停止匹配并按当前匹配规则处理请求
文件及目录匹配
- -f和!-f用来判断是否存在文件
- -d和!-d用来判断是否存在目录
- -e和!-e用来判断是否存在文件或目录
- -x和!-x用来判断文件是否可执行
URI 重写
在 location 域内设置 rewrite 指令
例如
1 | location /page { |
检测请求头里的Referer的网址
1 | location /href { |