我的用例需要 nginx 重写目标 URL,将请求 uri 的最后一段转换为由 wireguard vpn 访问的目标服务端口。下一个配置版本运行良好。也就是说,我的后端托管应用程序已成功发布,但 auth_request 指令被忽略 =>
location /publish {
auth_request /auth;
rewrite ^/publish/([0-9]+) http://10.11.2.3:$1;
proxy_http_version 1.1;
}
我已经证明身份验证服务运行正常。我在尝试解析需要端口但不需要路径的目标 URL 时遇到了问题。
location ~ ^/publish/([0-9]+)$ {
auth_request /auth;
proxy_pass http://10.11.2.3:$1/;
proxy_http_version 1.1;
}
此配置失败,因为我的后端服务拒绝尾部斜杠。错误日志 =>
(111:连接被拒绝)连接到上游时,客户端:xx.xx.xx.xx,服务器:api.myservice.com,请求:“GET /publish/5500 HTTP/1.1”,上游:“http://10.11.2.3:5500/”
如果将上述配置更改为proxy_pass http://10.11.2.3:$1;
,则如预期的那样,将附加完整的 uri 路径。错误详细信息 =>upsteam: http://10.11.2.3:5500/publish/5500
我也尝试过将 rewrite 与 break 结合起来,然后加上 proxy_pass =>
location /publish/ {
auth_request /auth;
rewrite ^/publish/([0-9]+)$ $1 break;
proxy_pass http://10.11.2.3:$1;
proxy_http_version 1.1;
}
这几乎可以正常工作,只是附加了数字 uri,因为我无法在 proxy_pass url 上应用尾部斜杠。错误日志 =>
(111:连接被拒绝)连接到上游时,客户端:xx.xx.xx.xx,服务器:api.myservice.com,请求:“GET /publish/5500 HTTP/1.1”,上游:“http://10.11.2.3:55005500”
有什么想法吗?proxy_redirect?