Frage Wildcard-Vhosts auf Nginx


Ich habe gerade Nginx auf meinem Server installiert und bin sehr zufrieden mit den Ergebnissen, aber ich kann immer noch nicht herausfinden, wie virtuelle Platzhalter einfügen.

Dies ist die [Verzeichnis] ​​Struktur, die ich möchte:

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

Wie Sie sehen können, ist es ziemlich einfach, aber ich würde gerne Domänen hinzufügen können, indem Sie einfach einen A-Eintrag für eine neue Subdomain hinzufügen, der sofort auf das Unterverzeichnis desselben Namens unter public_html zeigt.

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

Jede Hilfe würde sehr geschätzt werden.


21
2018-03-21 17:32


Ursprung


Ich bin mir nicht sicher, was Sie unter "Unterverzeichnis mit dem gleichen Namen" verstehen, wenn Ihr Beispiel zwei verschiedene Namen hat: subdomain 1 / x.example.com - könntest Du das erläutern? - nickgrim
Wahr, nicht sehr klar, Entschuldigung. Sagen wir, ich habe Subdomain x.example.com, sein Verzeichnis wäre / public_html / x, aber ich brauche sowohl example.com als auch www.example.com, um auf / public_html / - rorygilchrist


Antworten:


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 regexp 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

36
2018-03-22 08:07



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
"funktioniert leider nicht" gibt leider keine Details. 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, dass meine Nginx-Version 0.8.54 ist - Alexander Azarov


So habe ich behandelt Virtuelle Hosts mit Nginx:

server_name ~^(?<vhost>.*)$;
root /srv/www/$vhost;
access_log /var/log/nginx/$vhost.access.log;

Ich bin mir nicht sicher warum Platzhalter-Unterdomänen in einem übergeordneten Ordner ist so falsch / irreführend.


1
2017-08-22 08:11





Diese Nginx-Konfigurationsdatei unten erlaubt Platzhalter-Hostnamen, die dynamisch zu dem entsprechenden Ordner in weitergeleitet werden /var/www/vhost/ während auch dynamisch die entsprechenden Protokolldateien generiert werden.

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

0
2018-02-27 13:39



Bitte erläutern Sie Ihre Lösung. - Andrew Schulman
Dies scheint praktisch identisch mit einer bestehenden Antwort zu sein. Was fügt das hinzu? - Michael Hampton♦
Bietet ein wenig mehr Spezifität. Hoffe es hilft allen. - AnthumChris