route different proxy based on subdomain request in nginx

I have one dedicated server in that server I deployed 5 nodejs application.

domain name: www.nnd.com
dedicated server ip: xxx.xx.x.60

I had domain which is pointed to my dedicated server ip.

sub domains are :

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

now in nginx configuration file based on the subdomain I need to route proxy. Example:

{
    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 
    }
}

Is there any condition and how can I get the original domain name from proxy header?


create a virtual host for each

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;
  }
}

And go on, change the port number to match the right port.


You can use RegExp to fetch host name like this

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

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

You can create virtual host for every sub domain.

For Ex you have 2 sub domain abc.xyz.com and abcd.xyz.com , and you want to host it on nginx single instance by proxy_pass then you can simply create virtual host for every sub domain

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;
  }
}

For more information you can refer here