W poniższych linii, ja może mieć plik konfiguracyjny site-specific, który zawiera dodatkowe fastcgi_params unikalne dla tej witryny. Jeśli ten plik istnieje, chcę go załadować.
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;
}
}
}
Jednak to nie działa i pojawia się błąd:
nginx: [emerg] Dyrektywa „include” nie jest dozwolona tutaj w ...
Aktualizacja
Pomyślałem, że zamiast osobno sprawdzać, mogę pozwolić na włączenie czeku dla mnie.
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;
}
}
To jednak nie działa.
nginx
fastcgi
configuration
Xeoncross
źródło
źródło
Odpowiedzi:
include
robi to podczas uruchamiania serwera - zmiennych wykonawczych takich jak$host
nie można używać, ani nie można ich używać wif
kontekście, jak się dowiedziałeś.Musisz podzielić
server
bloki dla różnych hostów. Przepraszam!źródło
Cóż, to dość stare, ale i tak znalazłem obejście.
Mam konfigurację z vhostami skonfigurowanymi w tym stylu:
Zamiast sprawdzać, czy plik istnieje (co nie jest możliwe), po prostu wykonuję:
W ten sposób mogę po prostu utworzyć plik w
sites-customizations
folderze, który zgodnie z moją konwencją ma taką samą nazwę jak główna konfiguracja. Te*
prace prawie jak if, gdyż nie złamać, jeżeli nie ma dodatkowych plików konfiguracyjnych. Jeśli chcesz, umożliwia to również dodanie wielu dodatkowych konfiguracji w osobnych plikach.źródło
Wiem, że to stare, ale rozwiązanie może pomóc komuś, kto szuka odpowiedzi tak jak ja.
Miałem kilka przekierowań, które musiałem uwzględnić tylko dla konkretnego hosta i chociaż
include
nie jest to dozwolone wif
dyrektywie, ostatecznie dodałemif
plik, który zawierałem ...Mam więc
include /etc/nginx/conf.d/redirects
i wewnątrz tego pliku mam:źródło
Korzystam z
glob()
rozszerzenia wzorca funkcji, które jest używane przez nginx winclude
dyrektywie i działa dobrze na moich serwerach Debiana.W twoim przypadku spróbuj zastąpić ten wiersz:
z tym:
jest to maska pliku, która pasuje tylko do jednego pliku i nie spowoduje, że nginx narzeka, jeśli plik nie istnieje. Jednak zmienne nie są dozwolone w dyrektywach włączających, więc musisz podać stałą wartość w
<hostname>
. Musieliśmy stworzyć skrypt, który generuje pojedyncze pliki .conf (jeden na vhost).Edytować
Jak zauważył Gerald Schneider , sugerowałem pozostanie
$host
w zastępstwie, co jest niedozwolone. Zmieniłem powyższą sugestię.źródło
$host
nadal tu nie będzie działać.