In den folgenden Zeilen wird möglicherweise eine standortspezifische Konfigurationsdatei angezeigt , die zusätzliche, für diesen Standort eindeutige fastcgi_params enthält . Wenn diese Datei existiert, möchte ich sie laden.
server {
listen 80 default;
server_name _;
root /path/www/$host;
# Pass PHP scripts to php-fastcgi listening on port 9000
location ~ \.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
if (-f /path/www/$host/nginx.conf) {
include /path/www/$host/nginx.conf;
}
}
}
Dies funktioniert jedoch nicht und der Fehler, den ich erhalte, ist:
nginx: [emerg] "include" Direktive ist hier nicht erlaubt in ...
Aktualisieren
Ich dachte, anstatt separat zu prüfen, könnte ich auch für mich prüfen lassen .
server {
listen 80 default;
server_name _;
root /path/www/$host;
# Pass PHP scripts to php-fastcgi listening on port 9000
location ~ \.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
include /path/www/$host/*.nginx;
}
}
Dies scheint jedoch nicht zu funktionieren.
nginx
fastcgi
configuration
Xeoncross
quelle
quelle
Antworten:
include
macht seine Sache beim Serverstart - Laufzeitvariablen wie$host
können nicht verwendet werden, und sie können auch nicht in einemif
Kontext verwendet werden, wie Sie herausgefunden haben.Sie müssten die
server
Blöcke für verschiedene Hosts aufteilen . Es tut uns leid!quelle
Nun, das ist ziemlich alt, aber trotzdem habe ich einen Workaround gefunden.
Ich habe ein Setup mit vhosts in diesem Stil konfiguriert:
Anstatt zu überprüfen, ob die Datei existiert (was nicht möglich ist), mache ich einfach:
Auf diese Weise kann ich einfach eine Datei im
sites-customizations
-Ordner erstellen, die nach meiner Konvention den gleichen Namen hat wie die Hauptkonfiguration. Das*
funktioniert ziemlich ähnlich wie das if, da es nicht kaputt geht, wenn keine zusätzlichen Konfigurationsdateien vorhanden sind. Wenn Sie möchten, können Sie auf diese Weise auch mehrere zusätzliche Konfigurationen in separaten Dateien hinzufügen.quelle
Ich weiß, dass dies alt ist, aber die Lösung könnte jemandem helfen, nach einer Antwort zu suchen, wie ich es getan habe.
Ich hatte eine Reihe von Weiterleitungen, die ich nur für einen bestimmten Host einschließen musste, und obwohl
include
dies in derif
Direktive nicht zulässig ist , habe ich am Ende dieif
darin enthaltene Datei hinzugefügt ...Also habe ich eine
include /etc/nginx/conf.d/redirects
und in dieser Datei habe ich:quelle
Ich nutze die
glob()
Funktionsmuster-Erweiterung, die von nginx in derinclude
Direktive verwendet wird und auf meinen Debian-Servern gut funktioniert.Versuchen Sie in Ihrem Fall, diese Zeile zu ersetzen:
mit diesem:
Es ist eine Dateimaske, die nur mit einer Datei übereinstimmt und Nginx nicht dazu bringt, sich zu beschweren, wenn die Datei nicht existiert. Da Variablen in Include-Anweisungen nicht zulässig sind, müssen Sie in einen festen Wert eingeben
<hostname>
. Wir mussten ein Skript erstellen, das einzelne .conf-Dateien generiert (eine pro vhost).Bearbeiten
Wie Gerald Schneider betonte, schlug ich vor,
$host
die Ersetzung beizubehalten, was nicht erlaubt ist. Ich habe den obigen Vorschlag geändert.quelle
$host
wird hier immer noch nicht funktionieren.