我可以将ngnix配置为将http://mydomain/group1
重定向到'Group1'服务器,将http://mydomain/group2
重定向到'Group2'服务器。但是我需要修剪组名并将剩余的URL传递给后端服务器
即,
http://mydomain/group1/index.html
应该被重定向到'Group1'服务器http://mydomain/index.html
,类似于'Group2'
这可能吗?
以下是我的配置文件
upstream group1
{
server 10.18.1.10;
}
upstream group2
{
server 10.18.1.11;
}
server
{
listen 80;
server_name 10.18.1.9;
location /group1/
{
proxy_pass http://group1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location ~ /group2/(.*)
{
proxy_pass http://group2.$http_host/$1;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
答案 0 :(得分:2)
尝试这样的事情:
location ~* ^/group(\d*)/(.*) {
proxy_pass http://group$1.$http_host/$2;
}
这个snipplet的作用是捕获所有匹配regexp模式的请求
^/group(\d*)/(.*)
表示“获取所有以/ group /开头的内容”,同时捕获Group之后的数字以及斜线变为变量之后的尾随部分。变量是按“捕获”顺序排列的数字。因此,在该位置内,您可以使用它们通过原始请求中的“参数”将请求重写为您想要的任何内容。在这种情况下,您可以使用$ 1(组后面的数字)通过主机名指示后端服务器,使用$ 2来维护尾随部分。 $ http_host是对“Host:”HTTP标头的标准nginx引用。如果你有“静态”后端,你可以在proxy_pass中省略除$ 2之外的所有内容。