- Published on
nginx 配置规则解析
- Authors
- Name
- JiGu
- @crypto20x
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