将所有子域代理到其他域路径

时间:2016-06-04 18:56:50

标签: nginx

如何将所有子域代理到其他域路径?

例如

SUBDOMAIN.abcxyz123.com 

代理

myapp.otherdomain.com/SUBDOMAIN

确保保留请求中的所有标头/路径和查询参数。

更新

我已经尝试过,但仍然没有我需要的配置:

server {
    listen  80;

    server_name ~^(?<subdomain>.+)\.abcxyz123\.com$;

    location / {
    proxy_set_header Host "myapp.otherdomain.com";
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        # this worked:
        proxy_pass http://myapp.otherdomain.com/somepath/;
        # this does not work:
        #proxy_pass http://myapp.otherdomain.com/$subdomain$request_uri;
    }
}

1 个答案:

答案 0 :(得分:1)

试试这个

server {
    server_name   ~^(?<subdomain>.*)\.abcxyz123\.com$;

    resolver 8.8.8.8;

    rewrite ^/(.*)$ /$subdomain/$1;

    location / {
        proxy_set_header Host "myapp.otherdomain.com";
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_pass http://myapp.otherdomain.com;
    }
}

这应该使用原始查询参数(查询字符串,请求正文,请求方法等)代理所有流量,我将主机头更改为代理的“myapp.otherdomain.com”,包含'myapp.otherdomain的服务器。 com'有多个虚拟主机。如果您不想进行更改,请改用$ host。

这个答案可能需要另外编辑,因为你的问题不是很清楚。如果您还有其他问题,请在我的回答中进行评论。