nginx中路径的匹配问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx中路径的匹配问题相关的知识,希望对你有一定的参考价值。

参考技术A nginx的打交道很多,经常遇到404问题,每次出现都需要查资料才能写出结果。这次来总结一下。

访问的域名是 localhost/store/add_order.html
web根目录是/www/web
store是子目录。

配置如下

以上location存在3个匹配规则

最先匹配 location = /50x.html
再次匹配 location ~ .php$
最后 匹配 /

例如 http://localhost/store/add-order.html

将去 /www/web 目录下寻找 store/add-order.html 文件。

例如 http://localhost/store/add-order.php

将 /www/web 目录下和 store/add-order.php 组合成 SCRIPT_FILENAME,传递给php组件。

例如 http://localhost/api/add-order.php

则代理成 http://www.api.com/add-order.php

但是如果 没有写 / 结尾,
proxy_pass http://www.api.com;
则代理成 http://www.api.com/api/add-order.php

location用于匹配url
它进行的是模糊匹配
没有“/”时,location /abc/def可以匹配/abc/defghi请求,也可以匹配/abc/def/ghi等
而有“/”时,location /abc/def/不能匹配/abc/defghi请求,只能匹配/abc/def/anything这样的请求

那么产生的效果如下:

访问根目录/, 比如 http://localhost/ 将匹配规则A

访问 http://localhost/login 将匹配规则B, http://localhost/register 则匹配规则H

访问 http://localhost/static/a.html 将匹配规则C

访问 http://localhost/a.gif , http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用, 而 http://localhost/static/c.png 则优先匹配到 规则C

访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写。

访问 http://localhost/a.xhtml 不会匹配规则F和规则G,

http://localhost/a.XHTML 不会匹配规则G,(因为!)。规则F,规则G属于排除法,符合匹配规则也不会匹配到,所以想想看实际应用中哪里会用到。

访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候nginx转发请求给后端应用 服务器 ,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。

以上是关于nginx中路径的匹配问题的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 实践|location 路径匹配

Nginx配置proxy_pass转发的/路径问题

nginx 转发配置

Nginx配置proxy_pass转发的/路径问题

如何将任何包含点的路径与 nginx 匹配?

Nginx的location匹配规则-根据url 路径重定向到不同的IP