ngx_cache_purge
モジュールが必要でNginxをソースコードからビルドしたのでメモしておきます。以下順番にrootユーザーで実行しています。
ビルド準備
コンパイラなどを入れます。*-devel
はmoduleを追加しなければ入れなくてokです。
yum install -y gcc gcc-c++ libxslt-devel gd-devel GeoIP-devel
ビルド時に必要なライブラリ類のダウンロード
PCRE
PCRE - Perl Compatible Regular ExpressionsのダウンロードリンクからPCRE(PCRE2ではない)をダウンロードして解凍します。
cd /usr/local/src
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
tar -zxvf pcre-8.43.tar.gz
rm pcre-8.43.tar.gz
cd pcre-8.43
OpenSSL
OpenSSLのダウンロードページから最新版をダウンロードして解凍します。
cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz
tar -zxvf openssl-1.1.1d.tar.gz
rm openssl-1.1.1d.tar.gz
zlib
zlib Home Siteから最新版をダウンロードして解凍します。
cd /usr/local/src
wget https://www.zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
rm zlib-1.2.11.tar.gz
ngx_cache_purge
GitHubのリリースページから最新版を確認してダウンロードして解凍します。
cd /usr/local/src
wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz
tar -zxvf 2.3.tar.gz
rm 2.3.tar.gz
echo-nginx-module
GitHubのリリースページから最新の正式版をダウンロードして解凍します。
cd /usr/local/src
wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz
tar -zxvf v0.61.tar.gz
rm v0.62rc1.tar.gz
Nginx
Nginxのダウンロードページから最新版をダウンロードして解答します。
cd /usr/local/src
wget https://nginx.org/download/nginx-1.17.8.tar.gz
tar -zxvf nginx-1.17.8.tar.gz
rm nginx-1.17.8.tar.gz
configure
ダウンロードが終わったらNginxのディレクトリに入ってMakefileを作成します。
cd nginx-1.17.8
今回は以下ののようなオプションを設定しました。オプションについてはBuilding nginx from Sourcesに詳しくあります。
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--modules-path=/usr/lib64/nginx/modules \
--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 \
--user=nginx \
--group=nginx \
--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 \
--with-pcre-jit \
--with-http_addition_module \
--with-http_dav_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_flv_module \
--with-http_mp4_module \
--with-stream_ssl_preread_module \
--with-http_sub_module \
--with-http_xslt_module \
--with-mail \
--with-mail_ssl_module \
--with-openssl=/usr/local/src/openssl-1.1.1d \
--with-pcre=/usr/local/src/pcre-8.43 \
--add-module=/usr/local/src/ngx_cache_purge-2.3 \
--add-module=/usr/local/src/echo-nginx-module-0.61
ビルドとインストール
インストール前にnginxユーザーの作成とchacheディレクトリの作成をしておきます。
useradd -M nginx
mkdir -p /var/cache/nginx
mkdir /var/cache/nginx/client_temp
mkdir /var/cache/nginx/proxy_temp
mkdir /var/cache/nginx/fastcgi_temp
mkdir /var/cache/nginx/uwsgi_temp
mkdir /var/cache/nginx/scgi_temp
ビルドしてインストールします。
make
make install
成功すれば--sbin-path
で指定したディレクトリにnginxの実行ファイルが出来上がっているはずです。
サービスに登録
これだけだとsystemdのサービスに登録されていないので/usr/lib/systemd/system/nginx.service
というファイルを下記内容で作成します。
実行ファイルの場所やPIDの場所などを変更した場合は設定も変更する必要があります。また、Restart=always
にしてプロセスの監視もするように設定しています。
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true
Restart=always
[Install]
WantedBy=multi-user.target
このファイルを設定後systemctl daemon-reload
でsystemdを再読み込みします。
自動起動設定
最後に自動起動設定をしてnginxを立ち上げれば完了です!
systemctl enable nginx.service
systemctl start nginx.service