我在标准反向代理场景中使用 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
当我点击网址时:
我被正确重定向到http://otherhost:8090
,但X-Forwarded-Port
标题丢失或错误。
在<VAR>
原始块中,我尝试了以下方法:
$server_port
- 这是 nginx 正在监听的端口(80),而不是请求端口。$pass_port
- 在我的设置中似乎为空,所以 nginx 删除了标题。$http_port
- 这是每个请求的随机端口。$remote_port
- 这是每个请求的随机端口。
我可以在部署时更改我的配置以硬编码到传入请求的已知端口,但理想情况下,我可以在不更改 nginx 配置的情况下更改前端端口。
我已经搜索了 nginx 变量列表,但找不到类似$request_port
. 有什么方法可以实现我的意图吗?