Nginx1.28.0でGeoIP2を使う
はじめに
ChatGPTに訊きながら作成した手順をメモしておく。
soをビルドする
ビルド準備
必要モジュールをインストール
必要なモジュールをapt installする。対象はChatGPTに言われたまま。
$ sudo apt update
$ sudo apt install -y \
build-essential \
git \
wget \
libmaxminddb-dev \
libpcre2-dev \
zlib1g-dev \
libssl-dev
作業フォルダを作成
ビルド用の作業ディレクトリを/tmp配下に作成して移動する。
$ cd /tmp
$ mkdir nginx-geoip2-build
$ cd nginx-geoip2-build
Nginxソースを取得
Nginxのソースファイルをwgetでダウンロードし、nginx-1.28.0.tar.gzを展開する。
$ wget https://nginx.org/download/nginx-1.28.0.tar.gz
$ tar xf nginx-1.28.0.tar.gz
GeoIP2をclone
続いて、Githubから本命のGeoIP2のプロジェクトをcloneする。
git clone https://github.com/leev/ngx_http_geoip2_module.git
現在の状態
これでビルドの準備が整った。
$ ll
(中略)
drwxr-xr-x 9 dezikomoe dezikomoe 4096 Jul 13 22:14 nginx-1.28.0/
-rw-r--r-- 1 dezikomoe dezikomoe 1280111 Apr 23 2025 nginx-1.28.0.tar.gz
drwxr-xr-x 3 dezikomoe dezikomoe 4096 Jul 13 22:10 ngx_http_geoip2_module/
ビルド実行
Nginxの情報取得
ビルド実行にあたり、nginx -VでNginxの詳細な情報を取得する。
$ nginx -V
nginx version: nginx/1.28.0
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)
built with OpenSSL 1.1.1f 31 Mar 2020
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/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=/run/nginx.pid --lock-path=/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-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_v3_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fdebug-prefix-map=/home/builder/debuild/nginx-1.28.0/debian/debuild-base/nginx-1.28.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'
./configure
./configureでMakefileを生成する。
先程のnginx -Vで出力されたconfigure arguments:の末尾に、--add-dynamic-module=../ngx_http_geoip2_moduleを足すだけ。
$ cd /tmp/nginx-geoip2-build/nginx-1.28.0
$ ./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/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=/run/nginx.pid \
--lock-path=/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-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-http_v3_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-cc-opt='-g -O2 -fdebug-prefix-map=/home/builder/debuild/nginx-1.28.0/debian/debuild-base/nginx-1.28.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' \
--with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' \
--add-dynamic-module=../ngx_http_geoip2_module
Makefileを確認
問題なければMakefileが無事に生成されているはず。どうなったか見てみよう。(トランプ風)
$ ll Makefile
-rw-r--r-- 1 dezikomoe dezikomoe 375 Jul 13 22:14 Makefile
make
Makefileが生成できたので、make modulesでビルドする。
$ make modules
モジュールを確認
objs/の下を確認すると、無事に目的のsoファイルがビルドできていた。
$ ll objs/*.so
-rwxr-xr-x 1 dezikomoe dezikomoe 119160 Jul 13 22:14 objs/ngx_http_geoip2_module.so*
-rwxr-xr-x 1 dezikomoe dezikomoe 93088 Jul 13 22:14 objs/ngx_stream_geoip2_module.so*
Nginxへの配置
生成したsoファイルを/usr/lib/nginx/にコピーしておく。
これでもう作業用のディレクトリは削除してOK。
$ sudo cp objs/ngx_http_geoip2_module.so /usr/lib/nginx/modules/
$ sudo cp objs/ngx_stream_geoip2_module.so /usr/lib/nginx/modules/
$ ll /usr/lib/nginx/modules/*.so
-rwxr-xr-x 1 root root 119160 Jul 13 22:16 /usr/lib/nginx/modules/ngx_http_geoip2_module.so*
-rwxr-xr-x 1 root root 93088 Jul 13 22:16 /usr/lib/nginx/modules/ngx_stream_geoip2_module.so*