当我访问时http://example.com/folder
,我的浏览器会重定向到example.com:8080
。
但是,当我访问时,它工作正常http://example.com/folder/
。
后端是一个apache
监听端口的服务器8080
。
nginx
配置:
server {
listen 80 default_server;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
proxy_redirect default;
}
}
我试过了:
...
proxy_pass http://127.0.0.1:8080/;
....
还是同样的问题。我看过类似的问题,但似乎找不到答案。
有人有主意吗?
答案1
port_in_redirect
在配置中禁用该选项。
Syntax: port_in_redirect <on | off>
Default: on
Context: http, server, location
指令允许或阻止 Nginx 处理的重定向中的端口指示。如果port_in_redirect
为off
,则 Nginx 在请求重定向时不会在 URL 中添加端口。
答案2
问题在于,apache
的mod_dir
模块将非尾随斜杠的 403 错误重定向到带有尾随斜杠的 URL。
关闭指令是一种解决方法,但我喜欢这个DirectorySlash
功能。只是不想暴露apache
后端。
尝试了一些方法之后,我终于通过修改配置找到了可行的解决方案nginx
:
...
proxy_set_header Host $host;
...
...变成这样:
...
proxy_set_header Host $host:80;
...
这招奏效了!希望这能帮到别人,因为这确实让我很头疼。