规则

nginx location语法

基本语法:location [=|||^~] /uri/ { … }

= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。~ 为区分大小写匹配(可用正则表达式)

!~为区分大小写不匹配

~ 为不区分大小写匹配(可用正则表达式)

!~*为不区分大小写不匹配

^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。

示例

Syntax:	location [ = | ~ | ~* | ^~ ] uri { ... }
		location @name { ... }
Default: —
Context: server, location

可以看到 locationopen in new window 具备两种规则,其中 @ 表示内部服务跳转,用于处理异常请求。

另外的是修饰符:

prefixprioritydesc
=1路径完全匹配
~3区分大小写的正则匹配
~*3不区分大小写的正则匹配
^~2前缀匹配
4不带任何修饰的前缀匹配,便于区分后续用 none 替代,Nginx 并无该说法

1. =

location = /abc {
  # localhost/abc # 匹配
  # localhost/ABC # 据说 windows 大小写不敏感会匹配,但未测试
  # localhost/abc/ # 不匹配
  # localhost/abcd # 不匹配
  # localhost/abc?a=1 # 匹配
}

location = /abc/ {
  # localhost/abc/ # 匹配
  # localhost/abc # 不匹配
  # localhost/abc/a # 不匹配
}

2. ~~*

# 此处未对结尾做限制,`~*` 一致
location ~ ^/abc {
  # localhost/abc # 匹配
  # localhost/abcd # 匹配
  # localhost/abc/a # 匹配
  # localhost/abc/a/b # 匹配
}

location ~*.(gif|jpg|jpeg)$ {

匹配任何已 gif、jpg 或 jpeg 结尾的请求。
}


location ^~ /images/ {

匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
}
location ~*.(gif|jpg|jpeg)$ {

匹配任何已 gif、jpg 或 jpeg 结尾的请求。
}


3. ^~none

# ^~ 一致,只是优先度更高
location /abc {
  # localhost/abc # 匹配
  # localhost/abcd # 匹配
  # localhost/abcd/a # 匹配
  # localhost/abc/a/b # 匹配
}




匹配正则

  • ^~ 标识不匹配正则 ~* \.(gif|jpg|jpeg)$ 表示使用正则, (~*) \. 转义符 只要以 .jpg .gif .jpeg $代表结尾
  • 让我们用一个例子解释上面的说法:
location = / {
[ configuration A ]
}

location / {
[ configuration B ]
}

location /documents/ {
[ configuration C ]
}

location ^~ /images/ {
[ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}

  1. 请求“/”匹配配置A
  2. 请求“/index.html”匹配配置B
  3. 请求“/documents/document.html”匹配配置C
  4. 请求“/images/1.gif”匹配配置D
  5. 请求“/documents/1.jpg”匹配配置E。