Vhosts génériques sur Nginx

25

Je viens d'installer Nginx sur mon serveur et je suis extrêmement satisfait des résultats, mais je n'arrive toujours pas à comprendre comment insérer des hôtes virtuels génériques.

Voici la structure [du répertoire] que j'aimerais:

-- public_html (example.com)
---subdoamin 1 (x.example.com)
---subdomain 2 (y.example.com)

Comme vous pouvez le voir, c'est assez basique, cependant, j'aimerais pouvoir ajouter des domaines en ajoutant simplement un enregistrement A pour un nouveau sous-domaine, qui pointera instantanément vers le sous-répertoire du même nom sous public_html.

Il y a des trucs sur le web, mais je n'ai pas rencontré quelque chose exactement comme ça.

Toute aide serait grandement appréciée.

rorygilchrist
la source
Je ne sais pas ce que vous entendez par "sous-répertoire du même nom" lorsque votre exemple a deux noms différents: subdomain 1/ x.example.com- pouvez-vous clarifier?
nickgrim
C'est vrai, pas très clair désolé. Disons que j'ai le sous-domaine x.example.com, son répertoire serait / public_html / x, mais j'ai besoin des exemples example.com et www.example.com pour pointer vers / public_html /
rorygilchrist

Réponses:

39

Je vais te montrer.

Le fichier de configuration

server {
  server_name example.com www.example.com;
  root www/pub;
}

server {
  server_name ~^(.*)\.example\.com$ ;
  root www/pub/$1;
}

Fichiers de test

Nous avons deux fichiers de test:

$ cat www/pub/index.html 
COMMON

$ cat www/pub/t/index.html 
T

Essai

Noms de serveurs statiques:

$ curl -i -H 'Host: example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:42 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

$ curl -i -H 'Host: www.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:48 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

Et le nom du serveur regexp:

$ curl -i -H 'Host: t.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:54 GMT
Content-Type: text/html
Content-Length: 2
Last-Modified: Wed, 23 Mar 2011 07:56:40 GMT
Connection: keep-alive
Accept-Ranges: bytes

T
Alexander Azarov
la source
Ne fonctionne malheureusement pas. Tous les sous-domaines pointent simplement vers public_html. Voici la deuxième configuration du serveur:server{ listen 80; server_name ~^(.*)\.example\.com$ ; location / { root /var/www/public_html/$1; index index.html index.htm index.php; } location ~ \.php$ { root $1; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/public_html/$1$fastcgi_script_name; include fastcgi_params; } }
rorygilchrist
4
"ne fonctionne pas malheureusement" ne donne malheureusement aucun détail. Consultez toujours nginx error.log pour plus de détails. J'ai mis à jour ma réponse pour vous montrer comment fonctionne cette configuration. Vous pouvez voir que ma version Nginx est 0.8.54
Alexander Azarov
A parfaitement fonctionné pour moi en ce moment.
Claire Furney
5

Ce fichier de configuration Nginx ci-dessous permet de créer des noms d'hôtes génériques qui acheminent dynamiquement vers le dossier correspondant /var/www/vhost/tout en générant dynamiquement les fichiers journaux respectifs.

http://test1.wildcard.com/var/www/vhost/test1
                                                   /var/log/nginx/test1.wildcard.com-access.log                                                    /var/log/nginx/test1.wildcard.com-error.log

http://test2.wildcard.com/var/www/vhost/test2
                                                   /var/log/nginx/test2.wildcard.com-access.log                                                    /var/log/nginx/test2.wildcard.com-error.log

wildcard.conf

server {
  listen 80;
  listen [::]:80;

  #  Match everything except dot and store in $subdomain variable
  #  Matches test1.wildcard.com, test1-demo.wildcard.com
  #  Ignores sub2.test1.wildcard.com
  server_name ~^(?<subdomain>[^.]+).wildcard.com;

  root /var/www/vhost/$subdomain;

  access_log /var/log/nginx/$host-access.log;
  error_log  /var/log/nginx/$host-error.log;
}
AnthumChris
la source
Veuillez expliquer votre solution.
Andrew Schulman
Cela semble être pratiquement identique à une réponse existante. Qu'est-ce que cela ajoute?
Michael Hampton
1
Fournit un peu plus de spécificité. J'espère que cela aide tout le monde.
AnthumChris