如何将nginx X-Forwarded-Port配置为最初的请求端口

问题描述 投票:0回答:1

我在标准反向代理方案中使用nginx,以将所有/auth的请求传递给另一台主机,但是我试图使用非标准端口。

我的最终目标是将X-Forwarded-Port标头设置为发出请求的端口。

这是我在nginx.conf中的位置块:

location /auth/ {
    proxy_pass       http://otherhost:8090;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port <VAR>;
}

此nginx在docker容器中运行,该容器配置为将请求从8085转发到容器中的80,以便nginx进程正在侦听80:

0.0.0.0:8085-> 80 / tcp

当我点击URL时:

http://localhost:8085/auth/

我正确地重定向到http://otherhost:8090,但是X-Forwarded-Port标头丢失或错误。

在原始块中有<VAR>的地方,我已经尝试以下操作:

  • $server_port-这是nginx正在监听的端口(80),而不是请求端口。

  • $pass_port-在我的设置中似乎为空,因此nginx删除了标头。

  • $http_port-这是每个请求的随机端口。

  • $remote_port-这是每个请求的随机端口。

可以在部署时更改我的配置,以硬编码到传入请求的已知端口,但是理想情况下,我可以更改前端端口,而无需对nginx配置进行任何更改。

我搜索了the nginx variable list,但找不到类似$request_port的内容。我有什么办法可以实现我的意图?

docker nginx reverse-proxy nginx-reverse-proxy x-forwarded-for
1个回答
0
投票

奇怪的是尚未回答,但答案是

proxy_set_header X-Forwarded-Port $server_port;
© www.soinside.com 2019 - 2024. All rights reserved.