Компіляція динамічних модулів nginx поза цільовою системою застосування
Дуже не люблю тримати на сервері щось зібране самостійно.
Тому компіляція модуля здійснюється на ноутбуці, з тим же debian 10, а на сервер копіюються лише два динамічні модуля.
Деякі з необхідних пакетів
apt install libmaxminddb-dev libgeoip-dev libperl-dev
Пакет із репозиторію зібраний з наступними параметрами, які знадобляться при компіляції модуля nginx -V
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | nginx version: nginx/1.14.2 built with OpenSSL 1.1.1c 28 May 2019 (running with OpenSSL 1.1.1d 10 Sep 2019) TLS SNI support enabled --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-tBUzFN/nginx-1.14.2=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_flv_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_secure_link_module --with-http_sub_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --add-dynamic-module=/build/nginx-tBUzFN/nginx-1.14.2/debian/modules/http-headers-more-filter --add-dynamic-module=/build/nginx-tBUzFN/nginx-1.14.2/debian/modules/http-auth-pam --add-dynamic-module=/build/nginx-tBUzFN/nginx-1.14.2/debian/modules/http-cache-purge --add-dynamic-module=/build/nginx-tBUzFN/nginx-1.14.2/debian/modules/http-dav-ext --add-dynamic-module=/build/nginx-tBUzFN/nginx-1.14.2/debian/modules/http-ndk --add-dynamic-module=/build/nginx-tBUzFN/nginx-1.14.2/debian/modules/http-echo --add-dynamic-module=/build/nginx-tBUzFN/nginx-1.14.2/debian/modules/http-fancyindex --add-dynamic-module=/build/nginx-tBUzFN/nginx-1.14.2/debian/modules/nchan --add-dynamic-module=/build/nginx-tBUzFN/nginx-1.14.2/debian/modules/http-lua --add-dynamic-module=/build/nginx-tBUzFN/nginx-1.14.2/debian/modules/rtmp --add-dynamic-module=/build/nginx-tBUzFN/nginx-1.14.2/debian/modules/http-uploadprogress --add-dynamic-module=/build/nginx-tBUzFN/nginx-1.14.2/debian/modules/http-upstream-fair --add-dynamic-module=/build/nginx-tBUzFN/nginx-1.14.2/debian/modules/http-subs-filter |
Код можна взяти і дебіанівський http://deb.debian.org/debian/pool/main/n/nginx/nginx_1.14.2-2+deb10u1.debian.tar.xz, а можна і оригінальний 1.14.2
1 2 3 4 5 6 7 8 | gpg --keyserver ipv4.pool.sks-keyservers.net --recv-keys B0F4253373F8F6F510D42178520A9993A1C052F8 cd /usr/src/nginx wget https://nginx.org/download/nginx-1.14.2.tar.gz wget https://nginx.org/download/nginx-1.14.2.tar.gz.asc gpg --verify nginx-1.14.2.tar.gz.asc tar -xvf nginx-1.14.2.tar.gz cd nginx-1.14.2 git clone https://github.com/leev/ngx_http_geoip2_module |
Запускаємо ./configure зі стандартними для дебіана параметрами, але тільки з потрібним модулем
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-tBUzFN/nginx-1.14.2=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_flv_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_secure_link_module --with-http_sub_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --add-dynamic-module=ngx_http_geoip2_module |
make -j8
Результат
ls -la objs/ngx_http_geoip2_module.so objs/ngx_stream_geoip2_module.so
1 2 | -rwxr-xr-x 1 user user 114832 мая 14 22:05 objs/ngx_http_geoip2_module.so -rwxr-xr-x 1 user user 88976 мая 14 22:05 objs/ngx_stream_geoip2_module.so |
Копіюємо їх або до стандартного каталогу модулів /usr/lib/nginx/modules/, та завантажуємо з окремих .conf
1 2 | load_module /usr/lib/nginx/modules/ngx_http_geoip2_module.so; load_module /usr/lib/nginx/modules/ngx_stream_geoip2_module.so; |
Або вказуємо завантаження модулів безпосередньо у nginx.conf.
Зверніть увагу на перемінну source=$http_x_forwarded_for, цей сервер знаходиться за іншим, і як $remote_addr у нього адреса front-end, а не клієнта.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ... load_module "/usr/lib/nginx/modules/ngx_http_geoip2_module.so"; load_module "/usr/lib/nginx/modules/ngx_stream_geoip2_module.so"; http { ... variables_hash_max_size 4096; variables_hash_bucket_size 128; geoip2 /var/lib/GeoIP/GeoLite2-Country.mmdb { auto_reload 1d; $geoip2_metadata_country_build metadata build_epoch; $geoip2_data_country_code source=$http_x_forwarded_for country iso_code; $geoip2_data_country_name source=$http_x_forwarded_for country names en; } geoip2 /var/lib/GeoIP/GeoLite2-City.mmdb { auto_reload 1d; $geoip2_metadata_city_build metadata build_epoch; $geoip2_data_city_name source=$http_x_forwarded_for city names en; } ... } ... |
Переконаємося, що все працює
1 2 3 | nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
Робота з geoip.mmdb локально з консолі
Оригінальний пост на SecOps.it Blog • Компіляція динамічних модулів nginx поза цільовою системою застосування