スポンサーリンク

当サイトはGeoIP2モジュールを使用していますが、nginxには含まれていないためにバージョンアップのたびに毎回rpmbuildでGeoIP2を動的モジュールとして組み込んだパッケージをビルドしています。
備忘録として記載しておきます。

GeoIP2を動的モジュールとしてnginxを導入

まず、nginx公式サイトからRPMソースをダウンロードします。
以下は2021年6月3日の最新版 1.21.0です。

$ curl -OL http://nginx.org/packages/mainline/centos/8/SRPMS/nginx-1.21.0-1.el8.ngx.src.rpm

ソースパッケージをインストールします。

$ rpm -ivh nginx-1.21.0-1.el8.ngx.src.rpm

次にngx_http_geoip2_moduleをダウンロードします。

バージョンは3.3です。

$ curl -OL https://github.com/leev/ngx_http_geoip2_module/archive/refs/tags/3.3.tar.gz

ダウンロードしたngx_http_geoip2_moduleのソースファイルをrpmbuild内に配置します。

$ tar zxvf 3.3.tar.gz -C rpmbuild/SOURCES

次にコンパイルで要求されるライブラリーをインストールします。

$ yum install gcc libmaxminddb libmaxminddb-devel pcre-devel zlib-devel

SPECファイルを編集します。

以下は差分です。

$ diff -Naru nginx.spec.org nginx.spec
--- nginx.spec.org      2021-05-25 22:09:39.000000000 +0900
+++ nginx.spec  2021-06-03 10:15:44.055789237 +0900
@@ -64,7 +64,7 @@
 %define WITH_CC_OPT $(echo %{optflags} $(pcre-config --cflags)) -fPIC
 %define WITH_LD_OPT -Wl,-z,relro -Wl,-z,now -pie

-%define BASE_CONFIGURE_ARGS $(echo "--prefix=%{_sysconfdir}/nginx --sbin-path=%{_sbindir}/nginx --modules-path=%{_libdir}/nginx/modules --conf-path=%{_sysconfdir}/nginx/nginx.conf --error-log-path=%{_localstatedir}/log/nginx/error.log --http-log-path=%{_localstatedir}/log/nginx/access.log --pid-path=%{_localstatedir}/run/nginx.pid --lock-path=%{_localstatedir}/run/nginx.lock --http-client-body-temp-path=%{_localstatedir}/cache/nginx/client_temp --http-proxy-temp-path=%{_localstatedir}/cache/nginx/proxy_temp --http-fastcgi-temp-path=%{_localstatedir}/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_temp --http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp --user=%{nginx_user} --group=%{nginx_group} --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-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module")
+%define BASE_CONFIGURE_ARGS $(echo "--prefix=%{_sysconfdir}/nginx --sbin-path=%{_sbindir}/nginx --modules-path=%{_libdir}/nginx/modules --conf-path=%{_sysconfdir}/nginx/nginx.conf --error-log-path=%{_localstatedir}/log/nginx/error.log --http-log-path=%{_localstatedir}/log/nginx/access.log --pid-path=%{_localstatedir}/run/nginx.pid --lock-path=%{_localstatedir}/run/nginx.lock --http-client-body-temp-path=%{_localstatedir}/cache/nginx/client_temp --http-proxy-temp-path=%{_localstatedir}/cache/nginx/proxy_temp --http-fastcgi-temp-path=%{_localstatedir}/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_temp --http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp --user=%{nginx_user} --group=%{nginx_group} --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  --add-dynamic-module=${RPM_SOURCE_DIR}/ngx_http_geoip2_module-3.3 --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-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module")

 Summary: High performance web server
 Name: nginx
@@ -84,6 +84,7 @@
 Source7: nginx-debug.service
 Source8: nginx.copyright
 Source9: nginx.check-reload.sh
+Source10: ngx_http_geoip2_module-3.3



@@ -217,6 +218,7 @@

 %attr(0755,root,root) %dir %{_libdir}/nginx
 %attr(0755,root,root) %dir %{_libdir}/nginx/modules
+%{_libdir}/nginx/modules/*
 %dir %{_datadir}/nginx
 %dir %{_datadir}/nginx/html
 %{_datadir}/nginx/html/*
追加箇所は3点です。
コンパイルオプションに--add-dynamic-moduleを追加しngx_http_geoip2_moduleのソースファイルのパスを指定しています。
ソースファイルをエントリしています。解凍したものを配置したので不要だと思います。
最後にインストールされるバイナリーのパスチェックがありますのでダイナミックモジュールのインストールパスを追加します。

準備が整ったのでバイナリーをビルドします。

$ rpmbuild -bb rpmbuild/SPECS/nginx.spec

必要なライブラリーなどが表示されたら追加でインストールして再度ビルドを実行してください。

旧バージョンのnginxをアンインストールします。
yum などでその他ダイナミックモジュールをインストールしている場合、パッケージのアップデートやrpm -e だと依存関係でアップデートや削除ができない可能性があります。
次では、一旦、yumを使ってすべてアンインストールしています。

$ yum remove nginx

ビルドした新バージョンのnginxをインストールします。

$ rpm -ivh rpmbuild/RPMS/x86_64/nginx-1.21.0-1.el8.ngx.x86_64.rpm

インストールが完了したら先ほどアンインストールしたダイナミックモジュールなどをインストールします。

$  yum install nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt

現在nginxは新しくインストールした状態になっていますので設定を行います。

$ cp /etc/nginx/nginx.conf.rpmsave /etc/nginx/nginx.conf
$ nginx -t
$ systemctl enable nginx
$ systemctl start nginx
既存のnginx.confは.rpmsaveで退避されていますので元に戻します。
nginx.confのチェックをしてエラーがないことを確認します。
サービスが自動的に起動するように設定します。
nginxサービスを起動します
以上で終了です。
スポンサーリンク

この記事が気に入ったら
フォローしよう

最新情報をお届けします

Twitterでフォローしよう

おすすめの記事