帮助如何为此 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/来检查配置
问题是
/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 首先扫描使用前缀字符串(没有正则表达式)定义的位置。此后,按照配置文件中声明的顺序检查具有正则表达式的位置。