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

时间:2014-01-11 15:55:37

标签: 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.xx.x.60
app5.nnd.com pointed to xxx.xx.x.60

现在在基于我需要路由代理的子域的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 
    }
}

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

2 个答案:

答案 0 :(得分:45)

为每个

创建一个虚拟主机
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;
  }
}

继续,更改端口号以匹配正确的端口。

答案 1 :(得分:17)

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

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

    location / {
        root   /sites/$domain;
    }
}