Что я хочу сделать, так это защититься от сегментов конфигурации с недопустимыми директивами, запускаемых в nginx, в котором не установлен соответствующий модуль. Что-то вроде директивы IfModule в Apache (http://httpd.apache.org/docs/current/mod/core.html#ifmodule). Есть ли что-нибудь подобное в nginx?
Apache's <IfModule>
применяет набор директив, если конкретный модуль загружен.
Поскольку Nginx не поддерживает динамическую загрузку модулей, эта функция недоступна.
Источник: http://trac.nginx.org/nginx/ticket/126
Насколько я могу судить, доступность функции не может быть определена из файла конфигурации.
Если кто-то хочет проверить, будет ли изменение конфигурации работать при текущих настройках, можно использовать команду configtest: nginx -t
(или /etc/init.d/nginx configtest
), прежде чем изменения вступят в силу. Это не идеально.
nginx поддерживает динамическую загрузку модулей начиная с версии 1.9.11 (объявление фев 2016). Тем не менее, нельзя предоставить альтернативные конфигурации в зависимости от наличия или отсутствия модулей.
Не следует объединять возможность загрузки модулей динамически или статически с возможностью проверки, включены ли соответствующие модули, с помощью директив в файле конфигурации. Независимо от способа добавления модуля в двоичный файл, возможность проверить, доступны ли модульные функции, была бы разумной функцией для поддержки. Этой функции просто еще нет, за исключением, возможно, нескольких модулей, которые имеют заметные побочные эффекты в конфигурации (например, добавление настраиваемого заголовка ответа будет видно на более позднем этапе обработки запроса).
Если "клей для сценариев" является опцией в развертывании для проверки функций, в командной строке можно сделать следующее: nginx -V
чтобы увидеть список известных модулей на момент компиляции. На выходе будет смесь --with-*
и --add-dynamic-module
флаги.
--with-http_v2_module
указывает на модуль (в данном случае http_v2_module), статически скомпилированный в двоичный файл;--add-dynamic-module=/path/to/module_name
указывает на динамический модуль. его можно включить (отключить) без перекомпиляции nginx, используя load_module module_name.so
основная директива.