当端点处于根上下文时,如何正确配置 nginx 代理传递?

当端点处于根上下文时,如何正确配置 nginx 代理传递?

我试图弄清楚当端点位于根上下文时如何在 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/;
}

相关内容