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

sri*_*har 39 proxy nginx

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

domain name: www.nnd.com
dedicated server ip: xxx.xx.x.60
Run Code Online (Sandbox Code Playgroud)

我有域指向我的专用服务器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
Run Code Online (Sandbox Code Playgroud)

现在在基于我需要路由代理的子域的nginx配置文件中.例:

{
    listen:80;
    server_name:xxx.xx.x.60
    location / {
        #here based on subdomain of the request I need to create proxy_pass for my node application 
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何条件,如何从代理标头获取原始域名?

Moh*_*ady 49

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

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后继续,更改端口号以匹配正确的端口.


Chi*_*Pai 17

您可以使用RegExp来获取此类主机名

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

    location / {
        root   /sites/$domain;
    }
}
Run Code Online (Sandbox Code Playgroud)


abh*_*493 6

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

对于 Ex, 您有 2 个子域 abc.xyz.com 和 abcd.xyz.com ,并且您想通过 proxy_pass 在 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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