规则
nginx location语法
基本语法:location [=|||^~] /uri/ { … }
= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。~ 为区分大小写匹配(可用正则表达式)
!~为区分大小写不匹配
~ 为不区分大小写匹配(可用正则表达式)
!~*为不区分大小写不匹配
^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。
示例
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location
可以看到 location 具备两种规则,其中 @
表示内部服务跳转,用于处理异常请求。
另外的是修饰符:
prefix | priority | desc |
---|---|---|
= | 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 结尾的请求。
}
^~
、none
3. # ^~ 一致,只是优先度更高
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 ]
}
- 请求“/”匹配配置A
- 请求“/index.html”匹配配置B
- 请求“/documents/document.html”匹配配置C
- 请求“/images/1.gif”匹配配置D
- 请求“/documents/1.jpg”匹配配置E。