防止在 nginx 中重定向时更改端口

arb*_*les 15 nginx port varnish redirection

我目前有 nginx 设置来通过 Varnish 提供内容。Nginx 监听 8000 端口,varnish 将用户的请求从 80 连接到 8000。

问题是,在某些情况下,尤其是在尝试访问目录时,例如site.com/2010nginx 将请求重定向到site.com:8000/2010/.

我怎样才能防止这种情况?

Lux*_*ian 15

我的情况 nginx 侦听80docker 容器内的端口,但它映射到8080容器外的端口(或任何随机端口)。中间没有反向代理可以为端口添加适当的标头,也不想在 nginx 配置中对其进行硬编码。

错误重定向示例:

http://localhost:8080/directory -> http://localhost/directory/

我试过:

server {
  # ...
  port_in_redirect off;
  server_name_in_redirect off;
  # ...
}
Run Code Online (Sandbox Code Playgroud)

但是没有用。唯一有效的是:

server {
  # ...
  absolute_redirect off;
  # ...
}
Run Code Online (Sandbox Code Playgroud)

手动输入absolute_redirect说:

如果禁用,由 nginx 发出的重定向将是相对的。

我发现这更灵活,并且不需要您在任何地方硬编码服务器名称和端口。

如果您担心使用相对 URL 进行重定向,请查看此评论


arb*_*les 14

我通过更仔细地阅读HttpCoreModule 文档找到了这个问题的答案。

port_in_redirect off;

这会保留客户端在重定向期间使用的端口。密切相关的是server_name_in_redirect它使用第一个主机名进行重定向。因为我不希望 sitename.v.myserver.com 重定向到 sitename.com,