nginx中基于子域请求路由不同的代理

nginx中基于子域请求路由不同的代理,nginx,proxy,Nginx,Proxy,我在部署了5个nodejs应用程序的服务器中有一个专用服务器 domain name: www.nnd.com dedicated server ip: xxx.xx.x.60 我有一个指向我的专用服务器ip的域 子域包括: app1.nnd.com pointed to xxx.xx.x.60 app2.nnd.com pointed to xxx.xx.x.60 app3.nnd.com pointed to xxx.xx.x.60 app4.nnd.com pointed to xxx.

我在部署了5个nodejs应用程序的服务器中有一个专用服务器

domain name: www.nnd.com
dedicated server ip: xxx.xx.x.60
我有一个指向我的专用服务器ip的域

子域包括:

app1.nnd.com pointed to xxx.xx.x.60
app2.nnd.com pointed to xxx.xx.x.60
app3.nnd.com pointed to xxx.xx.x.60
app4.nnd.com pointed to xxx.xx.x.60
app5.nnd.com pointed to xxx.xx.x.60
现在在基于子域的nginx配置文件中,我需要路由代理。 例如:


是否存在任何条件以及如何从代理标头获取原始域名?

您可以使用RegExp这样获取主机名

server {
    server_name   ~^(www\.)?(?<domain>.+)$;

    location / {
        root   /sites/$domain;
    }
}
服务器{
服务器名称^(www\)(?.+)$;
地点/{
根/站点/$域;
}
}

为每个主机创建一个虚拟主机

server {
  server_name sub1.example.com;
  location / {
    proxy_pass http://127.0.0.1:xxxx;
  }
}
server {
  server_name sub2.example.com;
  location / {
    proxy_pass http://127.0.0.1:xxxx;
  }
}

然后,更改端口号以匹配正确的端口。

您可以为每个子域创建虚拟主机

对于Ex您有2个子域abc.xyz.com和abcd.xyz.com,并且您希望通过代理将其托管在nginx单个实例上,然后您可以简单地为每个子域创建虚拟主机

server {
  server_name abc.xyz.com;
  location / {
    proxy_pass http://127.0.0.1:8000;
  }
}
server {
  server_name abcd.xyz.com;
  location / {
    proxy_pass http://127.0.0.1:8000;
  }
}

有关更多信息,您可以参考

我只是将专用ip映射到我的子域。因此,我将域名托管在外部,并在该设置中使用专用ip进行映射。那么,如何获取原始代理主机名呢?我想我遗漏了一些东西,不是所有的皮肤子域都映射到同一个ip吗?当我ping app1.nnd.com地址时,请求将到达我的专用服务器xxx.xx.x.60,现在nginx$http\u主机变量包含我的专用服务器ip xxx.xx.x.60,那么您是什么意思,那么现在从哪里可以获取app1.nnd.com中哪个nginx变量可能包含这些信息呢?您正在使用负载平衡服务器块吗?子域是否位于不同的服务器上?
server {
  server_name abc.xyz.com;
  location / {
    proxy_pass http://127.0.0.1:8000;
  }
}
server {
  server_name abcd.xyz.com;
  location / {
    proxy_pass http://127.0.0.1:8000;
  }
}