Nginx:从网址到子域

时间:2016-01-07 16:14:00

标签: redirect nginx proxy rewrite

我试图编写一个nginx conf来根据uri动态地将网址重定向到webapp。我使用proxypass指令。 例如,我想将http://www.example.com/clientname/重定向到http://clientname.internaldomain.local/webapp

到目前为止,我只是成功替换了新主机,但是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;
        }

}

有人已经做过类似的事吗?

感谢。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

这是做到这一点的方法:(在生产中设置)

    location ~* ^/(?<ccehost>.*)/(.*) {
           proxy_intercept_errors on;
           proxy_cookie_path ~*^/.* /;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-Host $host;
           proxy_set_header X-Forwarded-Server $host;
           proxy_pass http://$ccehost.app.ptf:8080/app/$2;
    }