nginx反向代理tomcat的問題
巴扎黑
巴扎黑 2017-05-16 17:09:04
0
1
467

大家好,有個問題想請教

問題描述:

location ^~ /tomcat/ {
            proxy_pass   http://127.0.0.1:8080/;
            proxy_redirect  off;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        }

location ^~ /ife2017/ {
            proxy_pass   http://127.0.0.1:8080/ife2017/;
            proxy_redirect  off;
            proxy_set_header  X-Real-IP $remote_addr;
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
            }

以上是我對nginx的部分配置,目的是

1.將www.abc.com/tomcat/xxx 的所有請求,跳到tomcat上,功能正常

2.將www.abc.com/ife2017/xxx 的所有請求,跳到tomcat,再透過tomcat跳到ife2017上,功能不正常

註:ife2017是tomcat根目錄下的一個資料夾,未使用nginx代理之前是能夠正常存取的

具體表現是www.abc.com/ife2017/123 能夠正常跳轉,且不帶連接埠號碼
而www.abc.com/ife2017/123/456 就無法正常跳轉,會跳到www.127.0.0.1.com/ife2017/123/456

我現在的解決辦法是將127.0.0.1改成實際域名,但這樣的話跳轉之後會加上端口號8080,雖然問題不大,但還是想要一個完美的解決方法

先謝謝大家了

巴扎黑
巴扎黑

全部回覆(1)
某草草

反向代理配置的問題,tomcat并不知道他在nginx后面,所以发送的重定向响应头仍然是使用后端的地址。在apache中可以通过配置ProxyPassReverse选项修改后端发给client的响应头来实现,在nginx中沒有類似選項,所以在發給後端的請求中添加代理資訊來實現(告訴tomcat前面有代理):

server {
    listen myhost:80;
    server_name  myhost;
    location / {
        root /path/to/myapp/public;
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://myapp:8080;
    }
}

參考文件:NGINX Solution for Apache ProxyPassReverse

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板