如果多个位置匹配,Nginx如何决定处理请求的位置

时间:2018-11-01 22:57:14

标签: nginx

我有两个位置的nginx服务器:

location /service1 {
    rewrite ^/service1/?(.*)$ /$1 break;
    proxy_pass http://localhost:xxxx;
}

location ~* /service2(?<stuff>.*)$ {
    rewrite ^ /service2$stuff break;
    proxy_pass http://192.168.0.X;
}

假设我有一个请求http://hostname/service1/service2。我注意到service2总是处理请求。但是我希望服务1来处理它。如何设置?

1 个答案:

答案 0 :(得分:1)

重要的是要了解Nginx如何选择哪个位置块来处理请求。请阅读https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms,非常有用的文章。

文章的相关摘录

重要的是要了解,默认情况下,Nginx将优先于前缀匹配来提供正则表达式匹配。但是,它首先评估前缀位置,从而允许管理员通过使用=和^〜修饰符指定位置来覆盖此趋势。

根据您的情况,您可以使用“位置^〜/ service1”

Nginx位置匹配器-https://nginx.viraptor.info/