nginx location
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location
修饰符解释
= 精确匹配
^~ 前缀匹配
无 前缀匹配
~ 区分大小写正则比配
~* 不区分大小正则匹配
@name 内部跳转用,不能嵌套和被嵌套
匹配规则
1,精确匹配(=)成功,则立即停止
2,匹配所有前缀匹配,记住最长前缀匹配的loaction
3,如果最长前缀匹配location是 ^~,则停止
4,然后按照书写顺序匹配正则location,找到则停止
5,如果没有找到匹配的正则location,则用之前找到的最长前缀匹配location
6,如果匹配到合适的location,则返回404
以上规则第6步有一个例外,当前缀匹配(空,^~)串以/结尾(like /app/)时且请求被 proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, or memcached_pass处理
时,当请求 /app (没有结尾的/)(/app没有合适的匹配)时会返回301 location: /app/,如果这不是期望的结果,
应该用 = 或正则匹配
ps:
1,location 里的正则支持捕获
2,匹配的uri最初是解码后的uri,发生内部跳转后可能会跟着变化
3,嵌套location还没有怎明白
参考
http://nginx.org/en/docs/http/ngx_http_core_module.html#location
https://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location
修饰符解释
= 精确匹配
^~ 前缀匹配
无 前缀匹配
~ 区分大小写正则比配
~* 不区分大小正则匹配
@name 内部跳转用,不能嵌套和被嵌套
匹配规则
1,精确匹配(=)成功,则立即停止
2,匹配所有前缀匹配,记住最长前缀匹配的loaction
3,如果最长前缀匹配location是 ^~,则停止
4,然后按照书写顺序匹配正则location,找到则停止
5,如果没有找到匹配的正则location,则用之前找到的最长前缀匹配location
6,如果匹配到合适的location,则返回404
以上规则第6步有一个例外,当前缀匹配(空,^~)串以/结尾(like /app/)时且请求被 proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, or memcached_pass处理
时,当请求 /app (没有结尾的/)(/app没有合适的匹配)时会返回301 location: /app/,如果这不是期望的结果,
应该用 = 或正则匹配
ps:
1,location 里的正则支持捕获
2,匹配的uri最初是解码后的uri,发生内部跳转后可能会跟着变化
3,嵌套location还没有怎明白
参考
http://nginx.org/en/docs/http/ngx_http_core_module.html#location
https://openresty.org/download/agentzh-nginx-tutorials-zhcn.html