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.


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

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.