我目前有nginx设置通过光油来提供内容。 Nginx监听端口8000,清漆将用户的请求从80连接到8000。
问题是,在某些情况下,特别是当试图访问一个目录时,比如site.com/2010会将请求redirect到site.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,请查看此评论 。
对于那些有
fastcgi_param SERVER_PORT应该和前端一样。
所以,我设定了
fastcgi_param SERVER_PORT 80;
从nginxredirect到合适的URL。