阻止在nginx中redirect端口

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

问题是,在某些情况下,特别是当试图访问一个目录时,比如site.com/2010会将请求redirectsite.com:8000/2010/

我怎样才能防止这个?

我更仔细地阅读了HttpCoreModule文档,发现了这个问题的答案。

port_in_redirect off;

这将保留redirect期间客户端使用的端口。 与使用第一个主机名redirect的server_name_in_redirect密切相关。 由于我不希望sitename.v.myserver.comredirect到sitename.com,

NGINX后面的代码可能使用FASTCGIvariablesSERVER_PORT来确定指向用户的位置。 SERVER_PORT将包含nginx监听的端口,所以在你的情况下这将是8000。

你可以尝试这样的testing目的:

 location ~ \.php$ { [...] fastcgi_param SERVER_PORT 80; } 

适应您的configuration。 这是一个肮脏的黑客,但可以帮助您诊断问题。

我的情况nginx监听docker容器内的端口80但它被映射到容器外端口8080 (或任何随机端口)。 中间没有反向代理,可以为端口添加适当的头文件,也不希望将其硬编码到nginxconfiguration中。

错误redirect的示例:

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

我试过了:

 server { # ... port_in_redirect off; server_name_in_redirect off; # ... } 

但没有工作。 唯一运作良好的是:

 server { # ... absolute_redirect off; # ... } 

手动inputabsolute_redirect说:

如果禁用,则由nginx发出的redirect将是相对的。

我觉得这样更灵活,并且不需要你在任何地方使用硬编码的服务器名称和端口。

如果您担心使用相对URL的redirect,请查看此评论 。

对于那些有

  • 清漆听港80
  • 后端服务器(在我的情况下nginx)侦听端口8080

fastcgi_param SERVER_PORT应该和前端一样。

所以,我设定了

 fastcgi_param SERVER_PORT 80; 

从nginxredirect到合适的URL。