Redirect Nginx:从url到子域的动态代理

Redirect Nginx:从url到子域的动态代理,redirect,nginx,proxy,rewrite,Redirect,Nginx,Proxy,Rewrite,我正在尝试编写一个nginx conf,根据uri动态地将url重定向到webapp。我使用proxypass指令。 例如,我想重定向到 到目前为止,我只成功地更换了新主机,但是uri被破坏了,因为我无法拆分它。(现在我甚至不能更换主机,不知道为什么…) 这是我的实际非工作配置: server { resolver 192.168.137.71; listen 80; server_name tomservpa1; loca

我正在尝试编写一个nginx conf,根据uri动态地将url重定向到webapp。我使用proxypass指令。 例如,我想重定向到

到目前为止,我只成功地更换了新主机,但是uri被破坏了,因为我无法拆分它。(现在我甚至不能更换主机,不知道为什么…)

这是我的实际非工作配置:

    server {
       resolver 192.168.137.71;
       listen   80;
       server_name     tomservpa1;

    location  ~ (^\/(.*)\/) {

                set $ccehost $2;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        X-Forwarded-Host $host;
                proxy_set_header        X-Forwarded-Server $host;
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_pass              http://$ccehost.internaldomain.local:9780/webapp/$new_request_uri;
                proxy_redirect          off;
                proxy_set_header        Host $host;
        }

}
有人已经做过这样的事了吗


谢谢。

您可以在
位置
指令中使用命名捕获,以避免范围和歧义问题。例如:

location ~ ^/(?<ccehost>[^/]+)/(?<new_request_uri>.*)$ {
    rewrite ^ /webapp/$new_request_uri break;
    ...
    proxy_pass http://$ccehost.internaldomain.local:9780;
    ...
}
location~^/(?[^/]+)/(?.*)${
重写^/webapp/$new\u request\u uri break;
...
proxy_pass http://$ccehost.internaldomain.local:9780;
...
}

您可以在
位置
指令中使用命名捕获,以避免范围和歧义问题。例如:

location ~ ^/(?<ccehost>[^/]+)/(?<new_request_uri>.*)$ {
    rewrite ^ /webapp/$new_request_uri break;
    ...
    proxy_pass http://$ccehost.internaldomain.local:9780;
    ...
}
location~^/(?[^/]+)/(?.*)${
重写^/webapp/$new\u request\u uri break;
...
proxy_pass http://$ccehost.internaldomain.local:9780;
...
}
这是一种方法:(在生产中设置)

位置~*^/(?*)/(*)){
上的代理截获错误;
代理路径~*^/*/;
$remote\u addr的代理\u集\u头X转发;
代理设置头主机$Host;
代理集头X转发主机$Host;
代理设置头X转发服务器$host;
代理传递http://$ccehost.app.ptf:8080/app/$2;
}
这是一种方法:(在生产中设置)

位置~*^/(?*)/(*)){
上的代理截获错误;
代理路径~*^/*/;
$remote\u addr的代理\u集\u头X转发;
代理设置头主机$Host;
代理集头X转发主机$Host;
代理设置头X转发服务器$host;
代理传递http://$ccehost.app.ptf:8080/app/$2;
}

谢谢您的回答。它应该能工作,但它不能代表我不知道为什么。它试图让它发生在我之前,我不知道我是如何解决这个问题的。谢谢你的回答。它应该能工作,但它不能代表我不知道为什么。它试图让它发生在我之前,我不知道我如何修复这个。