web-dev-qa-db-fra.com

acheminer un proxy différent en fonction de la demande de sous-domaine dans nginx

J'ai un serveur dédié dans ce serveur, j'ai déployé 5 applications nodejs.

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

J'avais un domaine qui pointe vers mon IP de serveur dédié.

les sous-domaines sont:

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

maintenant dans le fichier de configuration nginx basé sur le sous-domaine dont j'ai besoin pour router le proxy. Exemple:

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

Existe-t-il une condition et comment puis-je obtenir le nom de domaine d'origine à partir de l'en-tête du proxy?

37
sridhar

créer un hôte virtuel pour chacun

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

Et continuez, changez le numéro de port pour qu'il corresponde au bon port.

47
Mohammad AbuShady

Vous pouvez utiliser RegExp pour récupérer le nom d'hôte comme celui-ci

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

    location / {
        root   /sites/$domain;
    }
}
17
Chia-Yu Pai

Vous pouvez créer un hôte virtuel pour chaque sous-domaine.

Pour Ex vous avez 2 sous-domaines abc.xyz.com et abcd.xyz.com, et vous souhaitez l'héberger sur une seule instance nginx par proxy_pass puis vous pouvez simplement créer un hôte virtuel pour chaque sous-domaine

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

Pour plus d'informations, vous pouvez vous référer ici

3
abhaygarg12493