当サイトは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/*
コンパイルオプションに
--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のチェックをしてエラーがないことを確認します。
サービスが自動的に起動するように設定します。
nginxサービスを起動します