Wildcard-Vhosts auf Nginx

25

Ich habe gerade Nginx auf meinem Server installiert und bin äußerst zufrieden mit den Ergebnissen, kann aber immer noch nicht herausfinden, wie virtuelle Wildcard-Hosts eingefügt werden.

Dies ist die [Verzeichnis] ​​-Struktur, die ich gerne hätte:

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

Wie Sie sehen, ist es ziemlich einfach, Domänen hinzuzufügen, indem Sie einfach einen A-Datensatz für eine neue Unterdomäne hinzufügen, der sofort auf das gleichnamige Unterverzeichnis unter public_html verweist.

Es gibt Sachen im Web, aber ich bin nicht auf genau so etwas gestoßen.

Jede Hilfe wäre sehr dankbar.

Rorygilchrist
quelle
Ich bin mir nicht sicher, was Sie mit "gleichnamigem Unterverzeichnis" meinen, wenn Ihr Beispiel zwei verschiedene Namen hat: subdomain 1/ x.example.com- Können Sie das klären?
Nickgrim
Richtig, nicht sehr klar, sorry. Nehmen wir an, ich habe die Subdomain x.example.com, das Verzeichnis wäre / public_html / x, aber ich brauche sowohl example.com als auch www.example.com, um auf / public_html /
rorygilchrist

Antworten:

39

Ich werde es dir zeigen.

Die Konfigurationsdatei

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

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

Dateien testen

Wir haben zwei Testdateien:

$ cat www/pub/index.html 
COMMON

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

Testen

Statische Servernamen:

$ 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

Und regulärer Servername:

$ 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
quelle
Funktioniert leider nicht. Alle Subdomains zeigen nur auf public_html. Hier ist die zweite Serverkonfiguration: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
"funktioniert leider nicht" gibt leider keine angaben. Schauen Sie immer in nginx error.log nach Details. Ich habe meine Antwort aktualisiert, um Ihnen zu zeigen, wie diese Konfiguration funktioniert. Sie können sehen, meine Nginx-Version ist 0.8.54
Alexander Azarov
Funktionierte gerade perfekt für mich.
Claire Furney
5

Diese Nginx-Konfigurationsdatei unten ermöglicht Platzhalter-Hostnamen, die dynamisch zum entsprechenden Ordner weitergeleitet werden und /var/www/vhost/gleichzeitig die entsprechenden Protokolldateien dynamisch generieren.

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
quelle
Bitte erläutern Sie Ihre Lösung.
Andrew Schulman
Dies scheint praktisch identisch mit einer vorhandenen Antwort zu sein. Was bedeutet das?
Michael Hampton
1
Bietet etwas mehr Spezifität. Hoffe es hilft allen.
AnthumChris