yum は止めて nginx をソースからインストールする

もふもふあげさん nginx
この記事は約12分で読めます。
スポンサーリンク

これまでさくら VPS(CentOS 6.4)上で稼働中だった nginx は yum でインストールした 1.2.0 なのだけど、モジュールを追加したいような場合はソースからインストールしないといけない。もちろん最新版をすぐに使いたい場合でもそう。

今回はキャッシュの操作用に ngx_cache_purge というモジュールを追加したいのと、SPDY を入れてみたいという衝動に駆られたので nginx 最新版をソースからインストールすることに切り替えた。

SPDY を試すには、openssl の最新版 (1.0.1e) もインストールする。ちなみに CentOS 6.4 上の yum でインストールできる最新版は 1.0.0 なので、こちらもソースをダウンロードする。とりあえず 1.0.0 はそのままにしておいて、nginx では 1.0.1e を使うように指定した。なお、現在の nginx 最新版は 1.3.15 だが、SPDY パッチが対応していないので 1.3.14 をインストールすることになった。

まずは念のために Web 用ディレクトリと nginx の設定ファイル関係をバックアップしておく。Web 用ディレクトリ丸ごとバックアップはかなり時間掛かるかもしれないけど、まぁこれは仕方ない。あと、yum でインストールしたバージョンは削除するのだけど、そうすると起動スクリプトが消えてしてしまうので、それもバックアップ。

mkdir ~/backup
cd ~/backup
sudo cp -r /var/www/html ./
sudo cp -r /etc/nginx ./
sudo cp /etc/init.d/nginx ./nginx.orig // 起動スクリプト保存

新規 nginx 作業ディレクトリは /usr/local/src/nginx とし、今後のバージョンアップはすべてこの場所で行うことにする。ちなみに SPDY 用パッチの最新版は patch.spdy-70_1.3.14.txt なのだけど、これだとどうもダメなようなので1つ前の patch.spdy-69_1.3.14.txt をダウンロードして使うことにした。

sudo mkdir /usr/local/src/nginx
cd /usr/local/src/nginx
sudo wget http://nginx.org/download/nginx-1.3.14.tar.gz
sudo wget http://nginx.org/patches/spdy/patch.spdy-69_1.3.14.txt
sudo wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
sudo wget http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz
sudo tar xvzf nginx-1.3.14.tar.gz
sudo tar xvzf openssl-1.0.1e.tar.gz
sudo tar xvzf ngx_cache_purge-2.1.tar.gz
cd nginx-1.3.14
sudo patch -p1 < ../patch.spdy-69_1.3.14.txt

上記で下準備は完了。で、nginx をソースからインストールする場合、configure 時にいろいろをオプションを付けることになるのだけど、それは現在起動中の nginx がどうなってるかを nginx -V で確認する(-v だと nginx のバージョンのみ表示)。

nginx -V
nginx version: nginx/1.2.0
built by gcc 4.4.4 20100726 (Red Hat 4.4.4-13) (GCC)
TLS SNI support enabled
configure arguments:
 --prefix=/etc/nginx/
 --sbin-path=/usr/sbin/nginx
 --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-http_ssl_module
 --with-http_realip_module
 --with-http_addition_module
 --with-http_sub_module
 --with-http_dav_module
 --with-http_flv_module
 --with-http_mp4_module
 --with-http_gzip_static_module
 --with-http_random_index_module
 --with-http_secure_link_module
 --with-http_stub_status_module
 --with-mail
 --with-mail_ssl_module
 --with-file-aio
 --with-ipv6
 --with-cc-opt='-O2 -g'

現在利用中のオプションからの変更個所および追加部分は以下になる。

 --prefix=/usr/local/nginx-1.3.14 // 変更
 --sbin-path=/usr/local/sbin/nginx // 変更
 --with-openssl=/usr/local/src/nginx/openssl-1.0.1e // 追加
 --with-http_spdy_module // 追加
 --add-module=/usr/local/src/nginx/ngx_cache_purge-2.1 // 追加

上記を踏まえて記述を変更追記してインストールする。

sudo ./configure --prefix=/usr/local/nginx-1.3.14 \
--sbin-path=/usr/local/sbin/nginx \
--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-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-cc-opt='-O2 -g' \
--with-openssl=/usr/local/src/nginx/openssl-1.0.1e \
--with-http_spdy_module \
--add-module=/usr/local/src/nginx/ngx_cache_purge-2.1/

ここで足りないライブラリが発覚したのでインストールして、再度 configure して作業の続き。

sudo yum install pcre pcre-devel
sudo yum install zlib zlib-devel
sudo ./configure ...... // やり直し
sudo make
sudo make install
sudo ln -s /usr/local/nginx-1.3.14 /usr/local/nginx // 今後のための対応

インストールが完了したら現状の nginx は動かしたまま、新しいバージョンの nginx で現在利用中の設定ファイルが問題ないかどうかを確認する。

sudo /usr/local/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

上記のように表示されて問題がなければ切り替えることになるのだけど、現在稼働中の nginx を止めている間に起動スクリプトを修正しないとだめなので、私は Apache を使ってメンテナンス中の画面を表示するようにした [01]

sudo /etc/init.d/nginx stop
sudo /etc/init.d/httpd start // メンテナンス画面表示に切り替え

ここで yum でインストールした nginx を削除する。リポジトリは nginx.repo という名前で作っていたので、それを利用する。それから警告が出るのでしっかり確認する。

sudo yum --enablerepo=nginx remove nginx.x86_64

......

警告: /etc/sysconfig/nginx は /etc/sysconfig/nginx.rpmsave として保存されました。
警告: /etc/nginx/nginx.conf は /etc/nginx/nginx.conf.rpmsave として保存されました。

上記警告のファイル名を元に戻す。またそれだけでなく /etc/nginx 内にあったファイル名の拡張子に .default が付いているので、それの削除も行う必要がある。.default が付いていないファイルもあるので、それは上書きしないこと。

sudo cp /etc/sysconfig/nginx.rpmsave /etc/sysconfig/nginx
sudo cp /etc/nginx/nginx.conf.rpmsave /etc/nginx/nginx.conf
cd /etc/nginx
sudo cp ./mime.types.default mime.types
sudo cp ./fastcgi_params.default fastcgi_params

古い nginx を削除すると冒頭にも書いた起動スクリプトが消えるので、これを元に戻してさらに内容を修正する。

cd ~/backup
sudo cp nginx.orig /etc/init.d/nginx
sudo vi /etc/init.d/nginx
#nginx=${NGINX-/usr/sbin/nginx}
nginx=${NGINX-/usr/local/sbin/nginx}

起動スクリプトに実行権が付いてるはずだけど、念のため確認。また sysconfig ファイルも修正して、自動起動設定をやり直す(これも yum で古いものをアンインストルールすると消えている)。

sudo vi /etc/sysconfig/nginx
#NGINX=/usr/sbin/nginx
NGINX=/usr/local/sbin/nginx
sudo chkconfig --add nginx
sudo chkconfig nginx on
sudo chkconfig --list nginx // ランレベル 2345 が on であること確認
sudo /usr/local/sbin/nginx -t // 念のため設定ファイルに問題ないか再度確認
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

ここまでで問題がなければ、メンテナンス用の Apache を止めて nginx を起動する。

sudo /etc/init.d/httpd stop // メンテナンス画面終了
sudo /etc/init.d/nginx start // 新しい nginx 起動
/usr/local/sbin/nginx -v
nginx version: nginx/1.3.14 // SPDY 対応最新バージョンに切り替わった

メンテナンス画面を出すことで、切り替える間を急がなくても良いという精神的な安心感を得ることが大事。まぁさっさと片付けることができるに越したことはないけれど。

新しい nginx でブログが表示できることを確認できたら、ngx_cache_purge を使えるようにするのが重要項目だけど、この件を書くのは後日。SPDY のテストはいつでも良いので後回しにする。何でもできるようにしておいて何もしないということはよくあるのだけど、いきなりアレコレやったら脳みそぼーんなので、これくらいにしといたらぁみたいな。

それにしても、この手の切り替え。四六時中アクセスのある人気サイトだと切り替える日時をどうするのか凄く悩むのだろうなぁ。そういう意味ではこのサイト、あまり気にしないで作業できますというのは……わかった、みなまで云うな。土日の午前中なんて、メンテナンス日和ですよね。今日は外も晴れてるし(関係ない)。

というわけでですが、参考にしたサイトの方々 [02] [03] [04] [05] におかれましてはありがとうございました。

タイトルとURLをコピーしました