2016-01-20 380 views
2

我一直在爲此奮鬥了一段時間。我的反向代理基本安裝是這樣的:Nginx反向代理重定向問題

global_nginx:http://192.168.115.200/client1/ => docker_nginx:http://localhost:8877/ => docker_app:http://app:8080/

反向代理服務器工作正常,但我有麻煩時,我的應用程序發送重定向。本質上,應用程序本身就是一個Spring MVC應用程序,它重定向如下:

@Controller 
public class Ctrl { 
    @RequestMapping(value = { "/" }) 
    public String redir() { 
     return "redirect:home"; 
    } 
} 

的結果是,當我瀏覽http://192.168.115.200/client1/我重定向到:http://192.168.115.200/home/但應該被重定向到http://192.168.115.200/client1/home/

這是global_nginx CONF:

location /client1 { 
    proxy_pass http://localhost:8877/.; 
    proxy_redirect http://localhost:8877/ /; 
    port_in_redirect off; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
} 

這是我docker_nginx的conf:

location/{ 
    proxy_pass http://app:8080/; 
    proxy_redirect http://app:8080/ /; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
} 

回答

1

您需要在proxy_redirect指令中添加/client1前綴。

可能:

proxy_redirect http://$host:8877/ /client1/; 

你可以有一個以上的proxy_redirect指令,如果你需要匹配多個條件。詳情請參閱this document

+0

謝謝我錯過了'/ client1 /'。但是在我添加這個之後,它仍然保持失敗。我結束了在服務器上的網絡連接以查看代理傳遞請求的主機部分。根據我的假設,Global_nginx沒有將http請求主機部分從'192.168.115.200 => localhost'更改。這給了我一個想法,將global_nginx代理重定向改爲這樣,最終工作: 'proxy_redirect http:// $ host:8877 // client1 /;' – Vampnik