Webサーバーアプリとして人気のあるNginxには、stable版とmainline版の2系統あり、Linuxで標準のリポジトリからNginxをインストールすると、通常はstable版のパッケージがインストールされます。
ですが、新機能やバグ修正はmainline版にいち早く提供されることから、mainline版のNginxを利用したいとお考えの方もいらっしゃるでしょう。
また、標準パッケージには含まれていないモジュールを組み込んだNginxをインストールしたい場合は、ソースからインストールすといった方法もあります。
そこでここでは、Redhat互換のLinuxでmainline版のNginxをインストールする方法や、ソースrpmからカスタムパッケージをビルドしてNginxをインストールする方法を紹介します。
目次
mainline版のNginxをインストール
repoファイルの作成
mainline版のNginxをインストールするには、以下の公式ページを参考にして、mainline版Nginxをインストールするためのリポジトリを作成します。
# vi /etc/yum.repos.d/nginx-mainline.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1
stable版Nginxのアンインストール
stable版のNginxがすでにインストールされている場合は、以下のコマンドでアンインストールしておきます。
# dnf remove nginx
mainline版Nginxのインストール
次に、先ほど作成したリポジトリを利用して、mainline版Nginxをインストールします。
# dnf install --enablerepo=nginx nginx
ソースrpmからNginxをインストール
標準のNginxパッケージには含まれていないモジュールを利用したい場合は、ソースrpmからカスタムパッケージをビルドしてインストールしたり、ソースからインストールする必要があります。
ここでは、Nignxのソースrpmからngx_cache_purgeモジュールを組み込んだカスタムパッケージをビルドしてインストールする方法を紹介します。
ここからの作業は、Webサーバー上で実施してもよいですし、ビルド用マシンを別途用意してもよいです。
rpmビルドに必要なパッケージのインストール
まず、rpmビルドに必要となるツールをインストールしておきます。
# yum -y install rpmdevtools redhat-lsb-core zlib-devel pcre-devel gcc
rpmビルド用ユーザーの作成
次に、rpmビルドを実行するユーザを作成します。ここでは「rpmbuilder」という名前のユーザーを作成しています。
# useradd rpmbuilder
ユーザーを作成したら、そのユーザーに切り替えて「rpmdev-setuptree」コマンドを実行し、ディレクトリ作成など、ビルドを実行するための初期設定を行います。
# su - rpmbuilder
$ rpmdev-setuptree
ソースの準備
次に、必要となるソースをインターネットからダウンロードし、インストールor解凍しておきます。なお、実行場所は、先ほど作成したユーザー「rpmbuilder」のホームディレクトリで構いません。
Nginx:
$ curl -L -O https://nginx.org/packages/mainline/centos/7/SRPMS/nginx-1.15.8-1.el7_4.ngx.src.rpm
$ rpm -ivh nginx-1.15.8-1.el7_4.ngx.src.rpm
ngx_cache_purge:
$ curl -L -O http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
$ tar xvfz ngx_cache_purge-2.3.tar.gz
specファイルの修正
次に、specファイルを修正します。
$ vi rpmbuild/SPECS/nginx.spec
ファイルの修正箇所は、Nginxに組み込むモジュールなどの情報が記載されている58行目の末尾に「ngx_cache_purge」の記述を以下のように追記します。
%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 --add-module=/home/rpmbuilder/ngx_cache_purge-2.3")
rpmパッケージをビルド
次に、ホームディレクトリに移動して、以下のコマンドでビルドを開始します。
$ rpmbuild -bb rpmbuild/SPECS/nginx.spec
ビルド完了までは、10分ぐらいかかります。
処理が正常終了すると、最終行付近は以下のように表示されているはずです。
書き込み完了: /home/rpmbuilder/rpmbuild/RPMS/x86_64/nginx-1.15.8-1.el7_4.ngx.x86_64.rpm
書き込み完了: /home/rpmbuilder/rpmbuild/RPMS/x86_64/nginx-debuginfo-1.15.8-1.el7_4.ngx.x86_64.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.AI5c6s
+ umask 022
+ cd /home/rpmbuilder/rpmbuild/BUILD
+ cd nginx-1.15.8
+ /usr/bin/rm -rf /home/rpmbuilder/rpmbuild/BUILDROOT/nginx-1.15.8-1.el7_4.ngx.x86_64
+ exit 0
なお、rpmパッケージは以下のディレクトリに生成されています。
$ /home/rpmbuilder/rpmbuild/RPMS/x86_64/nginx-1.15.8-1.el7_4.ngx.x86_64.rpm
ビルドしたパッケージをインストール
あとは、生成されたNginxのrpmパッケージをWebサーバーでインストールするだけです。
# yum install nginx-1.15.8-1.el7_4.ngx.x86_64.rpm
組み込みモジュールの確認
インストールが完了したら、組み込んだモジュール「ngx_cache_purge」が有効化されていることを確認します。
# nginx -V
nginx version: nginx/1.15.8
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
built with OpenSSL 1.1.1a 20 Nov 2018
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/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=/var/run/nginx.pid --lock-path=/var/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-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --add-module=/home/rpmbuilder/ngx_cache_purge-2.3 --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
Nginxインストール後の設定
Nginxをインストールした後は、必要に応じて設定ファイルの統合や、サービスの起動や自動起動設定を行います。
設定ファイルの統合
mainline版Nginxをインストールしたら「/etc/nginx」ディレクトリ内を確認し「nginx.conf」などの設定ファイルでrpmnewやrpmsaveファイルが生成されている場合は、既存の設定ファイルと新しい設定ファイルを統合します。
設定ファイルを統合する方法は、以下の記事をご覧ください。
設定ファイルを統合し終えたら「nginx -t」コマンドで、構文エラーがないか確認します。
Nginxサービスの起動と自動起動設定
次に、Nginxサービスの起動と自動起動設定を行います。
# systemctl start nginx
# systemctl enable nginx
以上で、作業完了です。