Nginx 简单使用笔记

Nginx 是一个轻量级的 Web 服务器 基础功能有反向代理, 邮件代理等, 同时其具有可高度定制的特点.
Nginx 有众多插件, 配合插件 Nginx 能实现直播等许多功能.
Nginx 的核心学习目标是它的配置文件 nginx.conf

配置文件

以下面的配置文件为例

配置文件中的配置是常用配置, 值有可能不是是默认值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 全局块
user nobody; # 启动用户
worker_processes 1; # 业务进程数量(子进程 worker), 一般不超过ngingx可用的CPU内核数量
error_log logs/error.log info; # 全局日志设置, 最后一个值为日志级别, 日志级别取值有 debug, info, notice, warn, error, crit, alert, emerg
pid logs/nginx.pid; # Nginx 的 pid 存放地址
...


events { # events 块
worker_connections 1024; # 单个业务进程可接受的连接数
accept_mutex on; #设置网路连接序列化, 防止惊群现象发生
multi_accept off; #设置一个进程是否同时接受多个网络连接
use epoll; #事件驱动模型, 取值有 select, poll, kqueue, epoll, resig, /dev/poll, eventport
}


http { # http 块
include mime.types; # 引入 mime.type 模块(文件扩展名与文件类型映射表)
default_type application/octet-stream; # 若 mime 类型未匹配成功时使用的传输方式方式
sendfile on; # 设置 sendfile 方式传输文件
keepalive_timeout 65; # 连接超时时间
gzip on; # gzip 压缩
access_log logs/access.log format_name; #服务日志, 第一个值为 off 时为取消服务日志. 第一个值时日志地址, 第二个值是格式化模板(可缺省)
log_format format_name '### $remote_addr ### $request ### $status'; # 日志格式话模板
sendfile_max_chunk 0; #每个进程每次调用传输数量不能大于设定的值, 0代表不设上限
error_page 404 500 /50x.html; # 错误页配置, 第一组值是错误码, 第二个值是错误页面的URI
deny 127.0.0.1 1; # 拒绝的ip组, 取值可有 address, CIDR, unix:, all
allow 172.18.5.54; # 允许的ip 组, 取值可有 address, CIDR, unix:, all
...

upstream servers_name { # 别名组
server 127.0.0.1:8000 weight=7 down; # weight 是权重, 缺省默认是1. down 代表下线, 缺省代表在线
server 127.0.0.1:8001 backup; # backup 代表是备用机, 有其他可访问实例时不会被访问
...
}

server { # http.server 块 (server 块)
listen 80; # 服务主机监听的端口号
server_name localhost; # 服务主机的主机名或域名
keepalive_requests 120; # 单连接请求上限次数
sendfile on; # 允许 sendfile 方式传输文件
deny 127.0.0.1 1; # 拒绝的ip组, 取值可有 address, CIDR, unix:, all
allow 172.18.5.54; # 允许的ip 组, 取值可有 address, CIDR, unix:, all
error_page 500 502 503 504 /50x.html; # 错误页配置
...

location / { # http.sevet.location 块 (location 块), / 是URI匹配规则
root html; # URI指向的文件夹
index index.html index.htm; # 默认页组
proxy_pass http://127.0.0.1:8000; #请求转发, 利用别名组代替地址可实现负载均衡
deny 127.0.0.1 1; # 拒绝的ip组, 取值可有 address, CIDR, unix:, all
allow 172.18.5.54; # 允许的ip 组, 取值可有 address, CIDR, unix:, all
...
}
}
}

核心模块指令

查看所有指令解释

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
    4
    limit_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
    5
    types {
    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 名称

$document_root

对于当前请求 root 或 alias 指令的值

$document_uri

同 $uri

$host

按以下优先级顺序:

  1. 请求行中的主机名,
  2. Host 请求标头字段中的主机名
  3. 与请求匹配的服务器名称

$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) 是正则表达式形式地址

前缀 解释
缺省 通用匹配
~ 匹配区分大小写正则表达式
~* 匹配不区分大小写正则表达式
!~ 不匹配区分大小写正则表达式
!~* 不匹配不区分大小写正则表达式
= 精确匹配
@ 内部跳转
^~ 普通字符串匹配上以后不再进行正则匹配

匹配优先级:

  1. 精确匹配 =
  2. 前缀匹配 ^~
  3. 按文件中顺序的正则匹配
  4. 匹配不带任何修饰的前缀匹配
  5. 交给 / 通用匹配
  6. 当有匹配成功时候, 停止匹配并按当前匹配规则处理请求

文件及目录匹配

  • -f和!-f用来判断是否存在文件
  • -d和!-d用来判断是否存在目录
  • -e和!-e用来判断是否存在文件或目录
  • -x和!-x用来判断文件是否可执行

URI 重写

在 location 域内设置 rewrite 指令
例如

1
2
3
4
5
6
7
8
9
10
 location /page {
# 匹配内容 替换内容 规则
rewrite ^/page/([0-9]+)/([0-9]+)$ /page?pageNum=$1&size=$2 break;
# 规则取值
# last 相当于apache里面的[L]标记,表示rewrite。
# break 本条规则匹配完成后,终止匹配,不再匹配后面的规则。
# redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址。
# permanent 返回301永久重定向,浏览器地址会显示跳转后的URL地址。
proxy_pass http://127.0.0.1:8000;
}

检测请求头里的Referer的网址

1
2
3
4
5
6
7
8
location /href {
valid_referers 127.0.0.1; # 检测请求头里的Referer的网址(可配多个值用空格分隔),取值还可以是none(不存在Referer请求头)、blocked(Referer请求头的值被防火墙或代理服务器删除或伪装,不以http://或https://开头)
if ($invalid_referer) { # 当检测不通过时
return 401; # 返回401
}

proxy_pass http://127.0.0.1:8000;
}