Назад | Перейти на главную страницу

Как я могу проверить, установлен ли модуль nginx через конфигурацию nginx?

Что я хочу сделать, так это защититься от сегментов конфигурации с недопустимыми директивами, запускаемых в 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 основная директива.