Published on

nginx 配置规则解析

Authors

location

location用于匹配请求的url,nginx中的$request_uri变量,格式:

location [ 空格 | = | ~ | ~* |^~|!~ | !~* ] /uri/ {}

=开头:表示精确匹配 ^~开头:注意这不是一个正则表达式,它的目的是优于正则表达式的匹配;如果该 location 是最佳匹配,则不再进行正则表达式检测。 开头:表示区分大小写的正则匹配; *开头:表示不区分大小写的正则匹配 ! && !*:表示区分大小写不匹配的正则和不区分大小写的不匹配的正则

不带前缀就是普通字符串匹配,比如:

/uri/ 普通字符串匹配 / 绝对路径根目录匹配,如果没有其它匹配,任何请求都会匹配到

location 是否以“/”结尾

在 ngnix 中 location 进行的是模糊匹配

没有“/”结尾时,location/abc/def 可以匹配 /abc/defghi 请求,也可以匹配 /abc/def/ghi 等 而有“/”结尾时,location/abc/def/ 不能匹配 /abc/defghi 请求,只能匹配 /abc/def/anything 这样的请求

proxy_pass 代理规则(是否以“/”结尾)

配置 proxy_pass 时,当在后面的 url 加上了 /,相当于是绝对路径,则 Nginx 不会把 location 中匹配的路径部分加入代理 uri。 **^~ /user/**表示匹配前缀是user的请求,proxy_pass的结尾有/, 则会把/user/*后面的路径直接拼接到后面,即移除user.

比如下面配置,我们访问 http://IP/proxy/test.html,最终代理到 URL 是 http://127.0.0.1/test.html

https://zhuanlan.zhihu.com/p/426512054