使用nginx将子域重写为后端代理

使用nginx将子域重写为后端代理,nginx,url-rewriting,Nginx,Url Rewriting,如果在我的nginx Web服务器配置中有子域:sub.mydomain.com 我有一个后端服务器,在端口5000上侦听: 是否可以将所有子域调用传递到后端 比如:去 这应该适用于所有方法:POST、PUT、GET、DELETE 更新: 当我呼叫我的服务器时: 使用以下配置: upstream http_backend { server 127.0.0.1:5000; } server_name ~^(?<subdomain>[^.]+)\.mydomain\.com;

如果在我的nginx Web服务器配置中有子域:sub.mydomain.com

我有一个后端服务器,在端口5000上侦听:

是否可以将所有子域调用传递到后端

比如:去

这应该适用于所有方法:POST、PUT、GET、DELETE

更新:

当我呼叫我的服务器时:

使用以下配置:

upstream http_backend {
    server 127.0.0.1:5000;
}

server_name ~^(?<subdomain>[^.]+)\.mydomain\.com;
这很好:

location / {
    proxy_pass  http://http_backend/mysubdomain/;

    proxy_redirect off;
    proxy_set_header    Host            $host;
    proxy_set_header    X-Real-IP       $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto https;
}
当我在access_日志中记录$subdomain变量时,它似乎是正确的。
nginx版本:nginx/1.9.15

要通过所有子域,您需要在服务器名称中设置它,方法是在域之前加上点

server_name.mydomain.com;

要通过所有子域,您需要通过在域之前添加点在服务器名称中设置它

server_name.mydomain.com;

是的,您可以在代理过程中使用变量。您可以使用regexp服务器名提取部分域

server {
   server_name ~^(?<sub>[^.]+)\.example\.com;
   # now subdomain of example.com placed to $sub
   # please, note, this rule do not work for http://example.com
   location / {
      proxy_pass http://127.0.0.1:5000/$sub/;
      # Path part of proxy_par URI will replace path 
      # part of location directive (so / -> /$sub/, /xxxx/ -> /$sub/xxxx/)
   }
}
服务器{
服务器名称~^(?[^.]+)\.example\.com;
#现在example.com的子域被放置到$sub
#请注意,这条规则不适用于http://example.com
地点/{
代理通行证http://127.0.0.1:5000/$sub/;
#代理服务器的路径部分将替换路径
#位置指令的一部分(so/->/$sub/,/xxxx/->/$sub/xxxx/)
}
}

仅此而已:)

是的,您可以在代理过程中使用变量。您可以使用regexp服务器名提取部分域

server {
   server_name ~^(?<sub>[^.]+)\.example\.com;
   # now subdomain of example.com placed to $sub
   # please, note, this rule do not work for http://example.com
   location / {
      proxy_pass http://127.0.0.1:5000/$sub/;
      # Path part of proxy_par URI will replace path 
      # part of location directive (so / -> /$sub/, /xxxx/ -> /$sub/xxxx/)
   }
}
服务器{
服务器名称~^(?[^.]+)\.example\.com;
#现在example.com的子域被放置到$sub
#请注意,这条规则不适用于http://example.com
地点/{
代理通行证http://127.0.0.1:5000/$sub/;
#代理服务器的路径部分将替换路径
#位置指令的一部分(so/->/$sub/,/xxxx/->/$sub/xxxx/)
}
}

仅此而已:)

如果我使用$subdomain变量,nginx似乎不会将$uri添加到代理过程中

以下解决方案有效:

location / {
    proxy_pass http://http_backend/$subdomain/$uri;
    proxy_redirect off;
    proxy_set_header    Host            $host;
    proxy_set_header    X-Real-IP       $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto https;
}

如果我使用$subdomain变量,nginx似乎不会将$uri添加到proxy_过程中

以下解决方案有效:

location / {
    proxy_pass http://http_backend/$subdomain/$uri;
    proxy_redirect off;
    proxy_set_header    Host            $host;
    proxy_set_header    X-Real-IP       $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto https;
}