Nginx:在重定向期间保留端口

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

我有一个 Nginx 服务器监听在 Docker 容器内运行的

80

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

redirect nginx docker
3个回答
8
投票

所以,我找到了一个解决方案,我可以指定重定向,如下所示:

rewrite ^ $scheme://$http_host/foobar.html redirect;

这将保留港口。


0
投票

我通过更新 nginx.conf 文件中定义的标头中的主机定义,解决了 docker 内部重定向中断的相同问题:

location / {
    proxy_set_header Host $http_host;

$http_host 是 $host 的小写值,包含端口。


0
投票

就我而言,在我正确设置

port_in_redirect on;
之前,浏览器已缓存重定向 URL。所以在调试 nginx 规则时禁用浏览器缓存。

© www.soinside.com 2019 - 2024. All rights reserved.