当未提供尾部斜杠时,nginx 重定向(而不是代理)到 apache 后端

当未提供尾部斜杠时,nginx 重定向(而不是代理)到 apache 后端

当我访问时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_redirectoff,则 Nginx 在请求重定向时不会在 URL 中添加端口。

答案2

问题在于,apachemod_dir模块将非尾随斜杠的 403 错误重定向到带有尾随斜杠的 URL。

这是文档mod_dir DirectorySlash

关闭指令是一种解决方法,但我喜欢这个DirectorySlash功能。只是不想暴露apache后端。

尝试了一些方法之后,我终于通过修改配置找到了可行的解决方案nginx

...
proxy_set_header Host $host;
...

...变成这样:

...
proxy_set_header Host $host:80;
...

这招奏效了!希望这能帮到别人,因为这确实让我很头疼。

相关内容