我在标准反向代理方案中使用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://otherhost:8090
,但是X-Forwarded-Port
标头丢失或错误。
在原始块中有<VAR>
的地方,我已经尝试以下操作:
$server_port
-这是nginx正在监听的端口(80),而不是请求端口。
$pass_port
-在我的设置中似乎为空,因此nginx删除了标头。
$http_port
-这是每个请求的随机端口。
$remote_port
-这是每个请求的随机端口。
我可以在部署时更改我的配置,以硬编码到传入请求的已知端口,但是理想情况下,我可以更改前端端口,而无需对nginx配置进行任何更改。
我搜索了the nginx variable list,但找不到类似$request_port
的内容。我有什么办法可以实现我的意图?
奇怪的是尚未回答,但答案是
proxy_set_header X-Forwarded-Port $server_port;