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

How to debug and fix nginx wrong location redirection problem?

我在下面有一个 Nginx 配置文件列表。我想根据 Refer.

将请求发送到不同的服务器

当我用 URL "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/;                                                                                                                                                                                                                                                                                                                             
        } 
    }

谢谢。

数字捕获 </code> 由要评估的最后一个 <em> 正则表达式 </em> 设置。在第二种情况下,<code>map 语句中的正则表达式在 location 语句中的正则表达式 之后计算

解决方案是改用命名捕获。

例如:

map $http_referer $be_pool {                                                                                                                                                                                                                                                                                                                                       
    default                  be;                                                                                                                                                                                                                                                                                                                                   
    "~a\.com\/.*\/0\/.*"     be_demo;                                                                                                                                                                                                                                                                                                                
} 
server {
    ...
    location ~ ^/capi/(?<myuri>.*)$ {                                                                                                                                                                                                                                                                                                                                               
        proxy_pass http://$be_pool/$myuri;                                                                                                                                                                                                                                                                                                                             
    } 
}