さくらVPSに最新Nginx1.9系をインストールした話


さくらVSP

(追記:2016-07-09)
ここの方法でNginxをインストールする場合,

openssl1.0.2に脆弱性(CVE-2016-2107, CVE-2016-2105, CVE-2016-2106, CVE-2016-2109, CVE-2016-2176)が判明し,
opensslのversionをあげることが推奨される.

Nginxをここの方法で入れたあるいはこれから入れようという人はこちらを参照.

さくらVPSの状態

  • ここここの初期設定が終わってる状態.
  • OSは標準のCentOS 6.7

さくらVPSにインストールされているOSを確認するコマンドは

$ cat /etc/redhat-release
CentOS release 6.7 (Final)

Nginxのビルド

(ここは読み飛ばしても大丈夫)

早速,Nginxをビルドしていく.

以下はさくらVPSにSSH接続している前提.

yumでできるかなと思って

$ yum info nginx

してみるもVersion古すぎてうっそだろお前状態.

そこで以下のコマンドでリポジトリを追加.

$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

これでokかなと思いきや.

$ sudo yum -y install nginx
$ nginx -v
nginx version: nginx/1.8.1

インストールされたのはNginx1.8系,

欲しいのは1.9系なのでダメ.

(1.8系でもいい人はok)

Nginxをソースからビルド・インストール

先ほどの章でyum -y install nginxした人は,
yum remove nginxする

まず,なんでもいいので作業用ディレクトリを作っておく.

$ mkdir ~/hoge
$ cd ~/hoge

ソースのダウンロード

作ったディレクトリの中に必要な最新版のソースをダウンロードしてくる.
必要なソースのホームページはこちら

現時点(2016-03-03)での最新は以下

  • nginx-1.9.12
  • openssl-1.0.2g
  • pcre-8.38
  • zlib-1.2.8 (筆者はwgetだけど他の方法でもok)
$ wget http://nginx.org/download/nginx-1.9.12.tar.gz
$ wget https://www.openssl.org/source/openssl-1.0.2g.tar.gz
$ wget http://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz
$ wget http://zlib.net/zlib-1.2.8.tar.gz

※なんかうめこまれてたら怖いのでちゃんとMD5,SHASUM等,ハッシュ値を照合する.

ソースの展開

照合できたら展開.

以下の4コマンドをやってもいいけど,

$ tar zxvf nginx-1.9.12.tar.gz
$ tar zxvf openssl-1.0.2g.tar.gz
$ tar zxvf pcre-8.38.tar.gz
$ tar zxvf zlib-1.2.8.tar.gz

シェルに頼って以下で一気にやったほうが効率的.

$ find ./ -type f -name "*.tar.gz" -exec tar zxf {} \;

一応,確認しとく.

$ ls
nginx-1.9.12         openssl-1.0.2g.tar.gz
nginx-1.9.12.tar.gz  pcre-8.38              zlib-1.2.8.tar.gz    zlib-1.2.8
openssl-1.0.2g       pcre-8.38.tar.gz

ok.

ソースのビルド・インストール

確認できたのでNginxのソース中でビルド・インストールする.

インストールパスは /usr/local/nginx 以下.

$ cd nginx-1.9.12
$ ./configure --with-openssl=../openssl-1.0.2g/ --with-http_ssl_module --with-pcre=../pcre-8.38 --with-zlib=../zlib-1.2.8  --with-http_v2_module --with-debug
$ make
$ sudo make install

エラーが出たら configure の引数のそれぞれの名前が一致しているかとか確かめる.

これで一応終了.

確認する.

$ sudo /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.9.12

ok.

起動して確認してみる.

$ sudo /usr/local/nginx/sbin/nginx
$ tail /usr/local/nginx/logs/error.log
2016/03/02 17:18:03 [notice] 3008#0: signal process started

ok.
もろもろの設定は
/usr/local/nginx/conf/nginx.conf をいじる.

自分のPCのブラウザから契約しているさくらVPSのIPアドレスにアクセス(URL欄にIPアドレスを入れる)してNginxの初期ページが見れたら成功.

Nginxのパスを通す

無事インストールできたけど,
起動したり止めたりリロードする際に
いちいち sudo /usr/local/nginx/sbin/nginx
って打つのはcoolじゃないのでパスを通しておく.

$ sudo vim ~/.bash_profile

以下を記載.

~/.bash_profile
export PATH=/usr/local/nginx/sbin:$PATH

書けたら bash_profile のリロード

$ source ~/.bash_profile

これで出来るはず.

nginx コマンドは動くようになったけど,

sudo 実行したらコマンドが見つかりませんって怒られた人は,
visudo を以下のようにいじる.

$ sudo nginx -v
sudo: nginx: コマンドが見つかりません
$ sudo visudo
visudo
# Defaults   env_keep += "HOME"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
↓
Defaults   env_keep += "HOME"
# Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

これで sudo nginx やりたい放題.

$ sudo nginx -v
nginx version: nginx/1.9.12

Nginxを自動起動するようにする

ソースビルド・インストールしたNginxはそのままだと servicechkconfig できないので出来るようにする.

/etc/init.d 以下に起動スクリプトを作成しデーモン化,
自動起動を可能にする.

$ sudo vim /etc/init.d/nginx

以下を記載.

/etc/init.d/nginx
#!/bin/bash

#chkconfig: 2345 80 30
#description: nginx
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin/:/usr/sbin:/usr/bin
DESC="nginx deamon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME

test -x $DAEMON || exit 0

d_start() {
        $DAEMON || echo -n " already running"
}

d_stop() {
        $DAEMON -s stop || echo -n " not running"
}

d_reload() {
        $DAEMON -s reload || echo -n " could not reload"
}

case "$1" in
        start)
                echo -n "Starting $DESC: $NAME"
                d_start
                echo "."
        ;;
        stop)
                echo -n "Stopping $DESC: $NAME"
                d_stop
                echo "."
        ;;
        reload)
                echo -n "Reloading $DESC configuration..."
                d_reload
                echo "reloaded."
        ;;
        restart)
                echo -n "Restarting $DESC: $NAME"
                d_stop
                sleep 2
                d_start
                echo "."
        ;;
        *)
                echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
                exit 3
        ;;
esac

exit 0

できたらパーミッションを変更.

$ sudo chmod +x /etc/init.d/nginx
$ ls -l /etc/init.d/nginx
-rwxr-xr-x 1 root root 872  3月  3 18:55 2016 /etc/init.d/nginx

ok.

chkconfignginx を追加.

$ sudo chkconfig --add nginx
$ chkconfig --list nginx
nginx           0:off   1:off   2:on    3:on    4:on    5:on    6:off

これで自動起動するようになった.

後は /usr/local/nginx/conf/nginx.conf を好きなようにいじる.

NginxをHTTP/2に対応させた話