魔法使いの卵

WEBエンジニアの卵の成長記録

さくらVPSにNginxをソースビルドで入れた

ソースビルドでnginxを入れる

  • 必要なライブラリ
必要なライブラリ 役割
pcre pcre-devel perl互換の正規表現用
zlib zlib-devel gzip圧縮用
openssl openssl-devel SSLツール
wget HTTPやFTP経由のファイル取得を行えるツール
ncurses-devel インストール・コンパイルの為
  • パッケージインストールコマンド
sudo yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel wget ncurses-devel
  • ※ 依存ライブラリの取り込み方は2種類有ります。
    • 今回はnginxのビルド時に依存ライブラリを静的に取り込みます
    • 動的にとりこむ場合は以下のオプションをconfigureを実行時に追加する
ライブラリ名 オプション名
PCRE --with-pcre=ディレクトリパス
zlib --with-zlib=ディレクトリパス
OpenSSL --with-openssl=ディレクトリパス
  • Nginx用ユーザとグループ作成
sudo groupadd nginx
sudo useradd -g nginx nginx
  • nginxユーザでのログインを禁止
sudo usermod -s /bin/false nginx
  • nginxの圧縮ファイルをダウンロード
wget http://nginx.org/download/nginx-1.11.0.tar.gz
  • nginxの圧縮ファイルを解凍
tar xvzf nginx-1.11.0.tar.gz
  • configureを実行(利用したいモジュールを追加)
./configure --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_v2_module
  • コンパイルしインストール
make
sudo make install
  • インストールできたか確認する
sudo /usr/local/nginx/sbin/nginx -V
  • Nginxのバージョン
nginx version: nginx/1.11.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_v2_module
  • userディレクティブを設定するために設定ファイルを開く
sudo vim /usr/local/nginx/conf/nginx.conf
  • 2行目のuserディレクティブを以下に変更
user  nginx nginx;
  • 起動スクリプトの作成

    • Nginxをソースからインストールした場合は起動スクリプトが作成されないため自作が必要
    • 今回はNginx入門から起動スクリプトを拝借した
  • 起動スクリプトを作成コマンド

sudo vim /etc/init.d/nginx
  • 起動スクリプトファイルの中身
#! /bin/sh
# chkconfig: 345 98 20
# Author: Ryan Norbauer http://norbauerinc.com
# Modified: Geoffrey Grosenbach http://topfunky.com
# Modified: Clement NEDELCU
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
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 quit || 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
    # 再起動の前に2秒スリープする。Nginxデーモンが穏便に終了するための時間を与えるのである。
    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
  • Nginxのコマンド
コマンド できること
sudo service nginx start 起動
sudo service nginx restart 再起動
sudo service nginx stop 停止
sudo chkconfig nginx on 自動起動

個人的におもったこと

  • ソースビルドでnginxの自動起動がうまく行かなかった
    • 解決策は起動スクリプト内にchkconfigを記述してランレベルの指定いるとか初耳
  • あとはディレクトリ構造の意味とか復習するいい機会になった(ほとんどわすれてた
  • 仮想サーバと違ってちゃんとやらなきゃって気持ちになるのはやっぱいい
  • これからも愛情いっぱいにこのサーバ育てる