Как Вы условно включаете файлы в Nginx vhost?

По моему опыту, необходимо ввести учетные данные Домена, который Вы оставляете.

12
задан 20 January 2012 в 01:11
4 ответа

include делает свое дело во время запуска сервера - переменные времени выполнения, такие как $ host , нельзя использовать, и они не могут быть использованы в если контекст, как вы выяснили.

Вам нужно разделить блоки server для разных хостов. Извините!

8
ответ дан 2 December 2019 в 21:29

Что ж, это старовато, но в любом случае я нашел обходной путь.

Я иметь настройку с vhosts, настроенными в этом стиле:

/etc/nginx/sites-enabled/site.com.conf

Вместо того, чтобы проверять, существует ли файл (что невозможно), я просто делаю:

include /etc/nginx/sites-customizations/site.com.*.conf

Таким образом я могу просто создать файл в папке sites-customizations , которая, по моему мнению, соглашением, называется так же, как основная конфигурация. * работает почти так же, как if, так как не ломается, если нет дополнительных файлов конфигурации. Если хотите, это также позволяет вам добавить несколько дополнительных конфигураций в отдельные файлы.

31
ответ дан 2 December 2019 в 21:29

Я знаю, что это устарело, но решение может помочь кому-то, ищущему ответ, как и я.

У меня было несколько перенаправлений, которые мне нужно было включить только для определенного хоста, и while include не допускается в директиве if , я закончил тем, что добавил if в файл, который я включал ...

Итак, у меня есть include /etc/nginx/conf.d/redirects и внутри этого файла у меня есть:

if ($host = "www.example.com") {
    # Some conf or redirects for this site only.
}
5
ответ дан 2 December 2019 в 21:29

Я использую расширение шаблона функции glob () , которое используется nginx в директиве include и хорошо работает на моих серверах Debian.

] В вашем случае попробуйте заменить эту строку:

include /path/www/$host/nginx.conf;

на эту:

include /path/www/<hostname>/nginx[.]conf;

это маска файла, которая соответствует только одному файлу и не заставит nginx жаловаться, если файл не существует. Однако переменные не допускаются в директивах include, поэтому вы должны указать фиксированное значение в . Нам пришлось создать сценарий, который генерирует отдельные файлы .conf (по одному для каждого виртуального хоста).

Изменить

Как указал Джеральд Шнайдер , я предлагал оставить $ host в замене, что не допускается. Я изменил предложение выше.

5
ответ дан 2 December 2019 в 21:29

Теги

Похожие вопросы