В приведенных ниже строках у меня может быть файл конфигурации для конкретного сайта, который содержит дополнительные fastcgi_params, уникальные для этого сайта. Если этот файл существует, я хочу загрузить его.
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;
}
}
}
Тем не менее, это не работает, и я получаю ошибку:
nginx: [emerg] директива include не разрешена здесь в ...
Обновить
Я думал, что вместо того, чтобы проверять отдельно, я мог бы разрешить включить проверку для меня.
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;
}
}
Тем не менее, это не похоже на работу.
nginx
fastcgi
configuration
Xeoncross
источник
источник
Ответы:
include
делает это во время запуска сервера - переменные времени выполнения, такие как,$host
не могут использоваться и не могут использоваться вif
контексте, как вы выяснили.Вам нужно разделить
server
блоки для разных хостов. Сожалею!источник
Ну, это довольно старый, но в любом случае, я нашел обходной путь.
У меня есть настройки с Vhosts, настроенный в этом стиле:
Вместо проверки, существует ли файл (что невозможно), я просто делаю:
Таким образом, я могу просто создать файл в
sites-customizations
-folder, который по моему соглашению называется тем же, что и основная конфигурация. Эти*
работы в значительной степени как если бы, как не сломаться , если нет дополнительных файлов конфигурации. Если вам нравится, это также позволяет вам добавить несколько дополнительных конфигураций в отдельных файлах.источник
Я знаю, что это старо, но решение может помочь кому-то искать ответ, как я.
У меня была куча перенаправлений, которые мне нужно было включить только для конкретного хоста, и хотя
include
это не разрешено вif
директиве, я закончил тем, что добавилif
внутренний файл, который я включал ...Итак, у меня есть
include /etc/nginx/conf.d/redirects
и внутри этого файла у меня есть:источник
Я использую преимущества
glob()
расширения шаблона функции, которое используется вinclude
директиве nginx и хорошо работает на моих серверах Debian.В вашем случае попробуйте заменить эту строку:
с этим:
это маска файла, которая соответствует только одному файлу, и не заставит nginx пожаловаться, если файл не существует. Однако переменные не допускаются в директивах include, поэтому вы должны указать фиксированное значение в
<hostname>
. Нам пришлось создать скрипт, который генерирует отдельные файлы .conf (по одному на vhost).редактировать
Как указал Джеральд Шнайдер , я предлагал оставить
$host
на замену, что недопустимо. Я изменил предложение выше.источник
$host
все еще не будет работать здесь.