Nginx:重定向期间保留端口

时间:2017-01-27 21:15:10

标签: redirect nginx docker

我有一个在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保留用户使用的端口?

2 个答案:

答案 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的小写值,包含端口。