nginx 配置位置中的正则表达式

问题描述 投票:0回答:1

帮助如何为此 nginx 配置正确编写正则表达式

location ~ /handler1/(?<var1>.*) {
    proxy_pass        http://www.test.com/handler1/$var1;
}    

location ~ /handler1/(?<var1>.*)/handler2 {
    proxy_pass        http://www.test.com/handler1/$var1/handler2;
}

location ~ /handler1/(?<var1>.*)/handler2/(?<var2>.*)/handler3 {
    proxy_pass        http://www.test.com/handler1/$var1/handler2/$var2/handler3;
}

我尝试了不同的选择,但总是命中第一场比赛 我使用这个服务https://nginx.viraptor.info/来检查配置 result

regex nginx-config nginx-location
1个回答
0
投票

问题是

/handler1/(?<var1>.*)
将匹配包含
/handler1/
的任何内容,因此在您的示例中 var1 将是
asd2/handler2
。您需要反转位置正则表达式,以便更具体的正则表达式排在第一位。所以这会起作用:

server {
 listen       80;
 server_name  domain2.com www.domain2.com;
 access_log   logs/domain2.access.log  main;

    location ~ /handler1/(?<var1>.*)/handler2/(?<var2>.*)/handler3 {
        proxy_pass        http://www.test.com/handler1/$var1/handler2/$var2/handler3;
    }

    location ~ /handler1/(?<var1>.*)/handler2 {
        proxy_pass        http://www.test.com/handler1/$var1/handler2;
    }

    location ~ /handler1/(?<var1>.*) {
        proxy_pass        http://www.test.com/handler1/$var1;
    }    
}

秘密是:

https://www.digitalocean.com/community/tutorials/nginx-location-directive

为了找到 URI 的位置匹配,NGINX 首先扫描使用前缀字符串(没有正则表达式)定义的位置。此后,按照配置文件中声明的顺序检查具有正则表达式的位置。

© www.soinside.com 2019 - 2024. All rights reserved.