我正在使用反向代理设置 docker 设置。根据文件名,一些请求被转发到一个容器,一些被转发到另一个容器。我还需要传递原始端口。初始请求来自端口 8091,然后转发到 80。我该如何传递端口?我试过 $server_port 和 $remote_port,但都没有达到我想要的效果。
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
在多个端口下运行的原因是为了支持在同一台服务器下部署多个应用程序。因此可以通过部署多个通过不同端口映射的docker setups来部署多个应用程序。
答案1
Nginx 将从 $server_port 添加 Forwarded-Port,就像您所做的一样。不过,您应该记住的一件事是,所有这些神奇的事情都是从 Nginx 的角度发生的,而从它的角度来看,$server_port 将是 nginx 在将此请求转发到另一台服务器之前所请求的内容。
想象一下这个简单的设置
client --> (8080) docker --> (80) nginx
|- /srv1 --> (8880) srv1
|- /srv2 --> (8880) srv2
在这种情况下,如果您在将请求代理到 srv1 和 srv2 时传递额外的标头,则 $server_port 将为 80,因为从 nginx 的角度来看,请求在代理到下一个服务器之前到达了端口 80,因为它不知道在此之前请求中发生的任何事情。
以下是一点实验室我已经为此付出了。