Ich versuche, meinen Entwicklungs-Nginx / PHP-Server mit einer grundlegenden Master / Catch-All-Vhost-Konfiguration einzurichten, damit ich bei Bedarf unbegrenzt___.framework.loc
viele Domänen erstellen kann .
server {
listen 80;
index index.html index.htm index.php;
# Test 1
server_name ~^(.+)\.frameworks\.loc$;
set $file_path $1;
root /var/www/frameworks/$file_path/public;
include /etc/nginx/php.conf;
}
Nginx antwortet jedoch mit einem 404-Fehler für dieses Setup. Ich weiß, dass Nginx und PHP funktionieren und die Berechtigung haben, da die von localhost
mir verwendete Konfiguration einwandfrei funktioniert.
server {
listen 80 default;
server_name localhost;
root /var/www/localhost;
index index.html index.htm index.php;
include /etc/nginx/php.conf;
}
Was sollte ich überprüfen, um das Problem zu finden? Hier ist eine Kopie dieser php.conf, die beide laden.
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_index index.php;
# Keep these parameters for compatibility with old PHP scripts using them.
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Some default config
fastcgi_connect_timeout 20;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_pass 127.0.0.1:9000;
}
php
nginx
virtualhost
Xeoncross
quelle
quelle
Nginx config ist kein Programm, sondern eine Deklaration. Wenn Sie config wie folgt verwenden:
Es gibt keine Möglichkeit sicherzustellen, dass Ihre
set
Anweisung zuvor ausgeführt wirdroot
.Aber es gibt einen Trick mit der
map
Direktive, die ich gerne benutze. Es beruht auf Tatsachen,map
die zuvor bewertet wurdenlocation
quelle
$mypath
hier? Es wird nirgendwo verwendet.$mypath
ist die Ergebnisgruppe für Regex~^(.?<mypath>+)\.frameworks\.loc$
und$rootpath
das Ergebnis für den gesamten Kartentrick .Zusätzlich zu der großartigen Antwort von DukeLion musste ich die Leitung wechseln
~^(.?<mypath>+)\.frameworks\.loc$ $mypath;
zu
~^(?P<mypath>.+)\.frameworks\.loc$ $mypath;
in meiner
/etc/nginx/nginx.conf
Datei wie hier vorgeschlagen .Hinzufügen
root /var/www/frameworks/$rootpath
in hat
/etc/nginx/sites-available/default
danach gut funktioniert.quelle
Vielleicht können Sie auch in lighttpd schauen. Es hat Unterstützung für genau das eingebaut, was Sie hier fragen. Es heißt mod_evhost .
Evhost aktivieren
Fügen Sie Ihrer lighttpd.conf folgende Zeilen hinzu. Wenn Sie mit Debian / Ubuntu Basisdistribution, nur Soft - Link oder kopieren Sie aus
/etc/lighttpd/conf-available/10-evhost.conf
zu/etc/lighttpd/conf-enabled/
.Der
%_
(Platzhalter) in evhost.path-patten bedeutet, dass der vollständige Domainname verwendet wird (z. B. www.example.com). Eine Anfrage für www.example.com wird automatisch an document-root weitergeleitet/home/www/www.example.com/
.Das Hinzufügen einer zusätzlichen Site ist so einfach wie das Erstellen eines weiteren Verzeichnisses unter dem
/home/www
vollständigen Domainnamen. Keine Änderung an der Lighttpd-Konfigurationsdatei.Es gibt andere Platzhalter, mit denen eine Verzeichnisstruktur erstellt werden kann. Sie sind wie folgt
Detailinformationen finden Sie hier .
PS: Das Aktivieren von PHP ist auch einfach, wenn Sie sich auf einer Debian / Ubuntu-Plattform befinden. Einfach aktivieren
10-fastcgi.conf
und15-fastcgi-php.conf
.quelle
NGINX verwendet die PCRE-Bibliothek für reguläre Ausdrücke.
Ab der NGINX v0.8.25-
server_name
Direktive sind benannte Captures möglich .Ich verwende das folgende Snippet, um Entwicklerumgebungen zu "umzäunen". «Benutzer» bezieht sich auf ihren Benutzernamen und «proj» auf das Projekt, an dem sie arbeiten:
Beachten Sie, dass die Nginx-Konfiguration deklarativ ist und statische Deklarationen daher im Vergleich zu zur Laufzeit berechneten Werten und Variablen immer schneller sein können. Die Auswertung regulärer Ausdrücke ist relativ kostspielig. Ich denke, sie muss in Umgebungen mit hoher Belastung (Produktion) mit Sparsamkeit verwendet werden.
quelle