使用nginx代理/重写,我可以将原始URL保留在浏览器的位置字段中吗?

时间:2016-01-13 19:00:03

标签: nginx

使用nginx.conf / proxy-passrewrite功能,我可以将原始网址保留在浏览器的“位置”字段中吗?

我有几个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与服务器的不同。

1 个答案:

答案 0 :(得分:3)

重写浏览器的问题重定向。

如果您只想从上游安装多个位置 - 您不需要重写,只需使用:

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

但应用应该使用相对链接或帐户来确定其绝对位置。

对于更复杂的网址操作,您可以使用break - 重写:

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