0

我有这两个规则:

    location ~* ^.+\.(jpg|jpeg|gif|css|js|png)$ {
        proxy_pass http://127.0.0.1:44843$request_uri;
    }

    location /pc {
        proxy_pass http://127.0.0.1:12345$request_uri;
    }

URI:

/pc/asser/somefile.js

属于第二条规则,为什么?

这是“位置/ pc”规则优先级较低的问题吗?

4

3 回答 3

1

Nginx文档定义了它:

指令按以下方式处理:

  • 首先处理精确的字符串匹配。如果找到匹配项,nginx 会停止搜索并满足请求。
  • 接下来处理剩余的文字字符串指令。如果使用了 "^~" 参数,那么 ngnix 会在此处停止并完成请求。否则,nginx 会继续处理位置指令。
  • 处理由正则表达式(带有 ~ 和 ~* 参数)指定的所有位置指令。如果正则表达式匹配请求,nginx 会在此处停止并完成请求。
  • 当没有正则表达式或没有正则表达式匹配时,使用最具体的文字字符串匹配。

所以你也应该对 /pc 使用正则表达式:

位置 ~ /pc/.* {
  proxy_pass http://127.0.0.1:12345$request_uri;
}
于 2012-08-26T17:39:06.803 回答
0

首先 nginx 检查使用前缀字符串(前缀位置)定义的位置。只有在此之后,它才会按照它们在配置文件中出现的顺序检查使用正则表达式定义的位置。

于 2012-08-26T17:33:56.833 回答
0

http://nginx.org/en/docs/http/ngx_http_core_module.html#location指定查看 nging 位置指令的顺序:

To find a location matching a given request, nginx first checks locations defined  
using the prefix strings (prefix locations). Among them, the most specific one is 
searched.

基本上这里的问题是前缀位置总是优先于正则表达式

因此,在您的配置中,如果两个块都匹配,则 /pc 前缀具有优先级

于 2012-08-27T07:07:39.763 回答