我试图弄清楚当端点位于根上下文时如何在 nginx 中配置反向代理:
http://frontend.com/mylink
代理转发至http://10.0.0.2:8000/
不幸的是,我无法更改应用程序的上下文http://10.0.0.2:8000
,因此我试图在 nginx 中找出解决此问题的方法。以下配置通常在有上下文时可以正常工作,但在上述情况下不起作用:
location /mylink {
proxy_pass http://10.0.0.2:8000;
proxy_redirect http://10.0.0.2:8000 /mylink;
port_in_redirect off;
}
知道我这里遗漏了什么吗?
答案1
我认为如果你将其改为:
location /mylink {
proxy_pass http://10.0.0.2:8000/;
proxy_redirect http://10.0.0.2:8000 /mylink;
port_in_redirect off;
}
注意行/
上的proxy_pass
,这会导致匹配的部分location
无法发送到服务器。
如需参考,请参阅http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass:
如果 proxy_pass 指令指定了 URI,那么当请求传递到服务器时,规范化请求 URI 中与位置匹配的部分将被指令中指定的 URI 替换:
答案2
由于您的 location 和 proxy_pass 没有尾部斜杠,因此规范化的 URI 将无法/mylink
正确看到部分剪切,proxy_redirect 默认行为也不会附加它。只需使用这个:
location /mylink/ {
proxy_pass http://10.0.0.2:8000/;
}