Компіляція динамічних модулів 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 1 d ;
$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 1 d ;
$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 локально з консолі
2020-05-14 17:20 +0000