Компіляція та підключення динамічних модулів nginx


Ця стаття розповість, як скомпілювати і встановити динамічні модулі в nginx в його поточну установку.

Я думаю, багато хто стикався з ситуацією, коли потрібно встановити веб-сервер, причому так гарний, до того ж з потрібними модулями. Для цього nginx підходить як ніякий інший краще. І що ж ви швидше за все робите, особливо, якщо ставите його в перший раз? Набираєте
apt-get install nginx
або
yum install nginx

Потім ви усвідомлюєте, що вам хочеться спробувати модуль з http2, використовувати модуль echo або додати підтримку обробки скриптів Ruby, підключивши до nginx модуль Passenger.
Якщо ви до цього працювали з Apache2 — вас чекає розчарування. Не можна просто так взяти і поставити модуль з репозиторію і активувати його в консолі (a2enmod).
З версії 1.9.11 nginx підтримує динамічні модулі. Вони встановлюються не так просто, як з Apache, але це не складно і зараз ми це з'ясуємо.
Звичайно, існують вже готові динамічні модулі від самих розробників nginx, які можна поставити з ріпи:
sudo apt-get install nginx-module-geoip

Але тут мова йде про модулях від третіх осіб.
Щоб не компілювати nginx з нуля, вказуючи потрібні модулі, а потім ще міняти конфіги, шляхи в системі і т. д. — можна додати динамічний модуль до поточної установці nginx.
Для цього нам знадобиться:
  • Исходники nginx, які відповідають вашій версії на сервері (перевірити версію можна за допомогою nginx -v). Качаємо исходники звідси.
  • Встановлений Passenger (т. до. ми будемо додавати його динамічний модуль до nginx)
  • Исходники інших необхідних нам модулів, яких немає в базовій поставці nginx: Модуль Echo


Щоб додати модулі до поточної установці nginx, нам потрібно дізнатися — з якими параметрами він був зібраний. Якщо збирати з параметрами, в яких будуть тільки нові модулі, nginx буде лаятися і не дозволить використовувати такий модуль.
Для того, щоб дізнатися, з якими параметрами був встановлений nginx (в тому числі, з репозиторію), потрібно набрати команду
nginx -V


Висновок буде приблизно таким:
--prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log-http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock-http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_perl_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic'


Нам залишилося тільки додати сюди потрібні нам модулі:
--add-dynamic-module=/usr/share/passenger/ngx_http_passenger_module --add-dynamic-module=/tmp/echo-nginx-module --with-http_v2_module

, де /usr/share/passenger/ngx_http_passenger_module — шлях до модуля Passenger, з'являється після його установки в систему,
/tmp/echo-nginx-module — шлях склонированного репозиторій модуля Echo.

В результаті вийде одна команда:
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log-http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock-http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_perl_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' -add-dynamic-module=/usr/share/passenger/ngx_http_passenger_module --add-dynamic-module=/tmp/echo-nginx-module --with-http_v2_module


Виконуємо її.

Залишається зібрати і оновити модулі для nginx:
make modules
sudo make install


Після цього ваш поточний nginx оновиться, до нього додадуться потрібні модулі, а динамічні модулі будуть лежати в папці /etc/nginx/modules.

Щоб задіяти їх у nginx, залишається лише дописати в глобальному конфіги nginx (/etc/nginx/nginx.conf) наступні рядки в початок файлу:
load_module modules/ngx_http_passenger_module.so;
 
load_module modules/ngx_http_echo_module.so;
 


Готово! Нам залишається перезавантажити веб-сервер і радіти життю з потрібними модулями:
service nginx reload


П. С. Я розумію, що для людей знаючих ця стаття — капітанська. Але для тих, хто з цим не стикався і кого лякає компіляція софта, стаття буде корисною, щоб безболісно додати нові або цікаві модулі в nginx.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.