include
делает свое дело во время запуска сервера - переменные времени выполнения, такие как $ host
, нельзя использовать, и они не могут быть использованы в если
контекст, как вы выяснили.
Вам нужно разделить блоки server
для разных хостов. Извините!
Что ж, это старовато, но в любом случае я нашел обходной путь.
Я иметь настройку с vhosts, настроенными в этом стиле:
/etc/nginx/sites-enabled/site.com.conf
Вместо того, чтобы проверять, существует ли файл (что невозможно), я просто делаю:
include /etc/nginx/sites-customizations/site.com.*.conf
Таким образом я могу просто создать файл в папке sites-customizations
, которая, по моему мнению, соглашением, называется так же, как основная конфигурация. *
работает почти так же, как if, так как не ломается, если нет дополнительных файлов конфигурации. Если хотите, это также позволяет вам добавить несколько дополнительных конфигураций в отдельные файлы.
Я знаю, что это устарело, но решение может помочь кому-то, ищущему ответ, как и я.
У меня было несколько перенаправлений, которые мне нужно было включить только для определенного хоста, и while include
не допускается в директиве if
, я закончил тем, что добавил if
в файл, который я включал ...
Итак, у меня есть include /etc/nginx/conf.d/redirects
и внутри этого файла у меня есть:
if ($host = "www.example.com") {
# Some conf or redirects for this site only.
}
Я использую расширение шаблона функции glob ()
, которое используется nginx в директиве include
и хорошо работает на моих серверах Debian.
] В вашем случае попробуйте заменить эту строку:
include /path/www/$host/nginx.conf;
на эту:
include /path/www/<hostname>/nginx[.]conf;
это маска файла, которая соответствует только одному файлу и не заставит nginx жаловаться, если файл не существует.
Однако переменные не допускаются в директивах include, поэтому вы должны указать фиксированное значение в
. Нам пришлось создать сценарий, который генерирует отдельные файлы .conf (по одному для каждого виртуального хоста).
Как указал Джеральд Шнайдер , я предлагал оставить $ host
в замене, что не допускается. Я изменил предложение выше.