Nginx location配置
简介:nginx 作为静态资源服务器或反向代理服务器,其 location指令 实现了对请求的分发规则。
语法: location [=||*|^~|@] pattern { ... }
[]作为可选项,其目的用于修饰后面的必选项pattern 。
选项的意义和优先顺序
- 精确匹配
=
- 前缀匹配
^~
(立刻停止后续的正则搜索) - 按文件中顺序的正则匹配
~
或~*
- 匹配不带任何修饰的前缀匹配。
先精确匹配,没有则查找带有 ^~的前缀匹配,没有则进行正则匹配,最后才返回前缀匹配的结果(如果有的话)
备注:对于相同修饰符,但pattern不通,还遵循最长匹配原则
测试工具:curl
为了快速的测试location的分发规则,我们可以借助curl 命令快速测试
案例一:server.location配置如下
server {
listen 85;
server_name localhost;
location / {
return 801; # 用这样的方式,可以方便的知道请求到了哪里
}
location /abc {
return 802;
}
location = /abc {
return 805;
}
location /abcde {
return 803;
}
location ^~ /abcd {
return 806;
}
location /abc/d {
return 804;
}
location ~ ^/ab[a-z]+ {
return 702;
}
}
解析案例一
curl -I localhost:85
HTTP/1.1 801
curl -I localhost:85/a
HTTP/1.1 801
备注1:无选项[]修饰符pattern为 / 可匹配全部url但优先级比较低
curl -I localhost:85/abc
HTTP/1.1 805
备注2:url=/abc 可匹配L1-3,但L2为精确匹配优先级最高
curl -I localhost:85/abc/a
HTTP/1.1 802
备注3:url=/abc/a 可匹配L1和L2同是无修饰符,但L2更长
curl -I localhost:85/abc/d
HTTP/1.1 804
备注4:可匹配L1,L2,L6,但L6更长(更精确)