我在下面有一个Nginx配置文件列表。我想根据参考将请求发送到其他服务器。
当我发送网址为“ doamin.com/capi/a/b”的请求并引用“ a.com/a/1/test”时,一切正常,服务器“ be”将获得“ be / a / b”请求。 但是,如果我发送URL为“ doamin.com/capi/a/b”的请求并引用“ a.com/a/0/test”,则服务器“ be_demo”将收到“ be_demo /”请求,路径为“ a / b”丢失。
我试图在“ be_demo”的末尾添加“ /”,但这不起作用。
map $http_referer $be_pool {
default be;
"~a\.com\/.*\/0\/.*" be_demo;
}
server {
...
location ~ ^/capi/(.*)$ {
proxy_pass http://$be_pool/$1;
}
}
谢谢。
答案 0 :(得分:1)
数字捕获$1
由要评估的最后一个正则表达式设置。在第二种情况下,在map
语句中的正则表达式之后 之后,对location
语句中的正则表达式进行求值。
解决方案是改用命名捕获。
例如:
map $http_referer $be_pool {
default be;
"~a\.com\/.*\/0\/.*" be_demo;
}
server {
...
location ~ ^/capi/(?<myuri>.*)$ {
proxy_pass http://$be_pool/$myuri;
}
}