2016-01-13 69 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

相关问题