我有一个在80
上监听的Nginx服务器在Docker容器内运行。
在Nginx配置中,我需要在特定情况下执行重定向到静态页面。
rewrite ^ /foobar.html redirect;
用户可以使用docker命令行运行容器指定任何端口(作为参考,她可以在端口8000
上公开容器,内部Nginx仍将使用80
)。
现在,当Nginx重定向URL时,端口将替换为Nginx使用内部的端口,而不是使用Docker使用的端口。
我试图设置一堆标题,但它们没有帮助:
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://app_server;
rewrite ^ /foobar.html redirect;
它仍然会重定向到80
。
如何告诉Nginx保留用户使用的端口?
答案 0 :(得分:5)
所以,我找到了一个解决方案,我可以按如下方式指定重定向:
rewrite ^ $scheme://$http_host/foobar.html redirect;
这将保留端口。
答案 1 :(得分:0)
我通过更新nginx.conf文件中定义的标头中的Host定义,解决了docker内部重定向断开的问题:
location / {
proxy_set_header Host $http_host;
$ http_host是$ host的小写值,包含端口。