如何调试和修复Nginx错误的位置重定向问题?

时间:2019-08-31 07:34:05

标签: nginx nginx-config

我在下面有一个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;                                                                                                                                                                                                                                                                                                                             
        } 
    }

谢谢。

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;                                                                                                                                                                                                                                                                                                                             
    } 
}