Linux

未提供斜杠時,nginx 重定向(非代理)到 apache 後端

  • January 30, 2013

當我訪問時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/;
....

還是同樣的問題。我看過類似的問題,但似乎無法得到這個問題的答案。

有人有想法麼?

問題是apache’smod_dir模組將非斜杠 403 重定向到帶有斜杠的 URL。

這是關於mod_dir DirectorySlash.

關閉指令是一種解決方法,但我喜歡這個DirectorySlash功能。只是不想暴露apache後端。

在嘗試了一些事情之後,我終於通過修改我的nginx配置找到了一個可行的解決方案:

...
proxy_set_header Host $host;
...

…對此:

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

這成功了!希望這對某人有所幫助,因為它確實讓我很頭疼。

禁用port_in_redirect配置中的選項。

Syntax:     port_in_redirect <on | off>
Default:    on
Context:    http, server, location

指令允許或阻止 Nginx 處理的重定向中的埠指示。如果port_in_redirectoff,則 Nginx 在重定向請求時不會在 URL 中添加埠。

引用自:https://serverfault.com/questions/473957