2016-01-13 47 views
1

使用nginx.conf功能如proxy-pass/rewrite,我可以在瀏覽器的位置字段中保留原始 URL嗎?使用nginx代理/重寫,我可以在瀏覽器的位置字段中保留原始URL嗎?

我有幾個PlayFramework應用程序運行在不同的端口(9001,9002,...),通過nginx.conf設置代理轉發。人們瀏覽他們爲:

  • http://domain.name/App1/
  • http://domain.name/App2/

nginx.conf條目是這樣的:

location /App1/ { 
    proxy_pass http://localhost:9001/; 
    rewrite ^/App1/(.*) http://domain.name:9001/$1; 
} 

如果我要http://domain.name/App1/,我在瀏覽器的地址欄中看到的是http://domain.name:9001。我希望我看到的是http://domain.name/App1/,也就是我想要名稱 App1保留在URI中,我寧願不公開端口號。

比方說,App1有一個鏈接/location/ABC。當我點擊它時,我看到http://domain.name:9001/location/ABC,當我希望我看到http://domain.name/App1/location/ABC

我可以通過nginx.conf實現嗎?

P.S.我把http://domain.name明確地寫在重寫規則中,因爲沒有它我在瀏覽器中得到localhost,而且我的瀏覽器的localhost與服務器的不一樣。

回答

2

重寫瀏覽器的問題重定向。

如果你只是想從上行流安裝幾個位置 - 你不需要重寫,只需使用:

location /App1/ { 
    proxy_pass http://localhost:9001/; 
} 

但應用程序應該使用他們的絕對位置相對鏈接或帳戶。

對於更復雜的URL操作,您可以使用break -rewrites:

location /App1/ { 
    rewrite ^/App1/(.*) /$1 break; 
    proxy_pass http://localhost:9001; 
} 
+0

感謝。這實際上是我嘗試的第一件事。但是,當我瀏覽到http://domain.name/App1/時,出現Action Not Found錯誤(對於請求'GET/App1 /'),因爲Play應用程序不希望在URL中看到它自己的名稱。 – gknauth

+0

然後嘗試'proxy_pass http:// localhost:9001 /'(注意斜槓) – Vasfed

+0

謝謝。我嘗試了上面的第二個完整示例,並且沒有結尾的斜槓。我到了應用程序的主頁,但是當我點擊一個鏈接是/位置/ ABC,我得到了http://domain.name/location/ABC-> 404 Not Found。相對而言,你是指該鏈接應該是位置/ ABC?我不知道是否省略了前導斜線可以用於PlayFramework路由。 – gknauth

相關問題