Как включить динамический модуль с существующей установкой NGINX

Введение

Из версии NGNX 1.9.11 и upwarts вводится новая функция: динамические модули.

С динамическими модулями вы можете дополнительно загружать отдельные файлы общих объектов во время выполнения в виде модулей - как сторонних модулей, так и некоторых собственных модулей NGINX. (источник)

Моя настройка и проблема

У меня есть NGINX, установленный с основной линии (в настоящее время 1.9.14), поэтому он способен использовать динамические модули. У него есть модуль, который я хочу динамически включить:

nginx -V
nginx version: nginx/1.9.14
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1) 
built with OpenSSL 1.0.1f 6 Jan 2014
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules ... --with-http_geoip_module=dynamic ...

Обратите внимание на --with-http_geoip_module=dynamic, который загружает необходимый мне модуль (динамически). К сожалению, документации не хватает (некоторые детали), и я не могу установить это.
У меня есть существующая установка NGINX (не из источника). Но насколько я понимаю, мне просто нужно создать модуль, поместить сгенерированный файл модуля в нужную папку NGINX и включить его в файле конфигурации.

То, что я пробовал до сих пор

Я тестировал это на другой машине (с той же конфигурацией, но не с производственной машиной), но я не вижу файл ngx_http_geoip_module.so. Команды, которые я использовал:

wget http://nginx.org/download/nginx-1.9.14.tar.gz
tar -xzf nginx-1.9.14.tar.gz
cd nginx-1.9.14/
./configure --with-http_geoip_module=dynamic

Вопросы

  • Проблема в том, что я пытаюсь создать модуль в системе, которая NGINX установил не из источника?
  • Почему нет файлов .so, сгенерированных моими командами?

Ответы

Ответ 1

У меня был тот же вопрос, и @vladiastudillo ответ был недостающим, который мне нужен.

Сначала добавьте стабильное репозитирование nginx:

sudo add-apt-repository ppa:nginx/stable

Затем запустите apt update:

sudo apt-get update

И получите модуль геоинформации nginx:

sudo apt-get install nginx-module-geoip

Это загрузит и загрузит модуль в /usr/lib/nginx/modules


Чтобы загрузить модуль nginx,

открыть nginx.conf:

sudo nano /etc/nginx/nginx.conf

добавьте ниже в основной контекст:

load_module "modules/ngx_http_geoip_module.so";

Модуль будет загружен при перезагрузке конфигурации или перезапуске nginx.

Чтобы динамически "выгрузить" модуль, закомментируйте или удалите его директиву load_module и перезагрузите конфигурацию nginx.

Ответ 2

Обнаружено, что это немного отличается от Amazon Linux 2016.09, Amazon Linux 2016.03 после выполнения обновления yum.

Вы можете подтвердить это заблаговременно, используя эту команду в экземпляре ec2 sudo yum search nginx-mod-http-geoip, и вы увидите запись N/S matched: nginx-mod-http-geoip в ответ со спецификацией nginx-mod-http-geoip.x86_64 : Nginx HTTP geoip module

В этих случаях установленная версия nginx будет 1.10.1. Когда это правда, вы можете просто установить модуль геоинформации nginx из существующего репозитория yum в Amazon через:

sudo yum install nginx-mod-http-geoip

Затем сопоставьте модуль с вашим nginx.conf и поместив эту строку в основной контекст

include /usr/share/nginx/modules/mod-http-geoip.conf;

(обратите внимание, что это существенно отличается от основного ответа - в aws у вас есть запись в nginx.conf, указывающая на другой файл *.conf, который затем указывает на файл *.so)

Ответ 3

У меня была такая же проблема, вам нужно установить http_geoip_module lib для вашей версии ubuntu с помощью:

$sudo apt-get install nginx-module-geoip

Ответ 4

Если вы используете Docker nginx: последний, этот модуль уже включен в образ как таковой, вам нужно только указать load_module как таковой:

"/usr/lib/nginx/modules/ngx_http_geoip_module.so";

Вам также необходимо создать папку geoip на томе, отображаемом в nginx. Хотя базы данных, похоже, больше не обновляются и не доступны, а модули geoip2 не включены. Так что вам много нужно гуглить...