location [=|~|~*|^~|@] pattern { ... }
匹配顺序
- 精确匹配 =
- 前缀匹配 ^~(立刻停止后续的正则搜索)
- 按文件中顺序的正则匹配 或*
- 匹配不带任何修饰的前缀匹配。
1、「=」 修饰符:要求路径完全匹配
2、「~」修饰符:区分大小写的正则匹配
3、「~*」不区分大小写的正则匹配
4、「^~」修饰符:前缀匹配 如果该 location 是最佳的匹配,那么对于匹配这个 location 的字符串, 该修饰符不再进行正则表达式检测。注意,这不是一个正则表达式匹配,它的目的是优先于正则表达式的匹配。
示例1
server {
server_name website.com;
location /doc {
return 701;
}
location ~* ^/document$ {
return 702;
}
}
curl -I website.com:8080/document
HTTP/1.1 702
示例2
server {
server_name website.com;
location /document {
return 701;
}
location ~* ^/document$ {
return 702;
}
}
curl -I website.com:8080/document
HTTP/1.1 702
示例3
server {
server_name website.com;
location ^~ /doc {
return 701;
}
location ~* ^/document$ {
return 702;
}
}
curl http://website.com/document
HTTP/1.1 701
示例4
server {
server_name website.com;
location /docu {
return 701;
}
location /doc {
return 702;
}
}
server {
server_name website.com;
location /doc {
return 702;
}
location /docu {
return 701;
}
}
curl -I website.com:8080/document
HTTP/1.1 701
#前缀匹配下,返回最长匹配的 location,与 location 所在位置顺序无关
示例5
server {
listen 8080;
server_name website.com;
location ~ ^/doc[a-z]+ {
return 701;
}
location ~ ^/docu[a-z]+ {
return 702;
}
}
#curl -I website.com:8080/document 返回 HTTP/1.1 701
server {
listen 8080;
server_name website.com;
location ~ ^/docu[a-z]+ {
return 702;
}
location ~ ^/doc[a-z]+ {
return 701;
}
}
#curl -I website.com:8080/document 返回 HTTP/1.1 702
#正则匹配是使用文件中的顺序,找到返回
5、「@」修饰符:主要起转发作用
以下配置,当出现404的时候,会跳转到百度
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
allow all;
}
#error_page 404 [http://www.baidu.com](http://www.baidu.com/) # 直接这样是不允许的
error_page 404 = @fallback;
location @fallback {
proxy_pass http://www.baidu.com;
}
}
网友评论