Как включить динамический модуль с существующей установкой 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 не включены. Так что вам много нужно гуглить...