ネットワーク > Webサーバー > nginx

nginxとは?

Nginxは、最近人気のWebサーバソフトです。Apacheの代わりに使われだしています。

nginx - Wikipedia

nginx(「エンジンエックス」と発音) は、軽量高性能なWebサーバ/リバースプロキシであり、同時に電子メール(IMAP/POP3)プロキシである。BSD系ライセンスでリリースされている。Unix系、Linux、BSD系、Mac OS X、Solaris、Microsoft Windows(Cygwinを使用)で動作する。

リンク

参考書

#html{{

table border="0" cellpadding="5"><tr><td valign="top">

a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048702270/sagasite-22/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51xpswg%2BkkL._SL160_.jpg" border="0"></a>

/td>

td valign="top">

a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048702270/sagasite-22/" target="_blank">ハイパフォーマンスHTTPサーバ Nginx入門</a>

br>
Clement Nedelcu<br>
アスキー・メディアワークス<br>
2011-04-21<br>
3150円

/td></tr></table>
}}

インストール

Nginxを、CentOSに、ソースコードからコンパイルして、手動でインストールする手順のまとめ

(参考)
CentOSにNginxをインストールする | HAPPY*TRAP
http://www.happytrap.jp/blogs/2012/02/23/8243/

ダウンロード

Nginx最新安定版(stable)を公式サイトからダウンロードします。

  1. Nginx最新安定版のバージョンを公式サイトで確認します。
    http://nginx.org/en/download.html
    (例) Stable version nginx-1.2.6
  2. 作業ディレクトリ(tmp)に移動します。
    $ cd /tmp
  3. 圧縮ファイルをダウンロードします。
    $ wget http://nginx.org/download/nginx-1.2.6.tar.gz
    (wgetコマンドがインストールされていない場合は、「sudo yum install wget」)
  4. ダウンロードしたファイルを解凍します。
    $ tar zxf nginx-1.2.6.tar.gz
  5. カレントディレクトリを移動します。
    $ cd nginx-1.2.6

コンパイル

  1. Nginx用のユーザーを作成します。
    $ sudo useradd -s/sbin/nologin -d/usr/local/nginx -M nginx
  2. Nginxに必要なライブラリをインストールします。
    (例では、必須ライブラリの他にHTTPSのコンテンツを処理するOpenSSLライブラリもインストールしています。)
    $ sudo yum install gcc
    $ sudo yum install pcre pcre-devel
    $ sudo yum install zlib zlib-devel
    $ sudo yum install openssl openssl-devel
  3. 使用するオプションを付けてconfigureを実行します。
    $ ./configure --prefix=/usr/local/nginx-1.2.6 --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module
  4. コンパイルして、インストールします。
    $ make
    $ sudo make install

シンボリックリンクの作成

  1. Nginxをバージョンアップするごとに異なるprefixを指定するので、変更をやりやすくするために、prefixのディレクトリを指すシンボリックリンクを作成します。
    ln -s /usr/local/nginx-1.2.6 /usr/local/nginx

自動起動スクリプト

Nginxをソースからインストールした場合は、起動スクリプトが作成されないので自作します。

  1. /etc/init.dにnginxのプログラム起動スクリプトのファイルを作成します。
    # vi /etc/init.d/nginx
  2. ファイル内容は、以下のようにします。
    #!/bin/sh
    #
    # nginx - this script starts and stops the nginx daemon
    # cf. http://www.happytrap.jp/blogs/2012/02/23/8243/
    #
    # chkconfig:   - 85 15
    # description:  Nginx is an HTTP(S) server, HTTP(S) reverse
    #               proxy and IMAP/POP3 proxy server
    # processname: nginx
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    # Source networking configuration.
    . /etc/sysconfig/network
    
    # Check that networking is up.
    [ "$NETWORKING" = "no" ] && exit 0
    
    nginx="/usr/local/nginx/sbin/nginx"
    prog=$(basename $nginx)
    
    NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
    
    lockfile=/usr/local/nginx/logs/nginx.lock
    
    start() {
        [ -x $nginx ] || exit 5
        [ -f $NGINX_CONF_FILE ] || exit 6
        echo -n $"Starting $prog: "
        daemon $nginx -c $NGINX_CONF_FILE
        retval=$?
        echo
        [ $retval -eq 0 ] && touch $lockfile
        return $retval
    }
    
    stop() {
        echo -n $"Stopping $prog: "
        killproc $prog -QUIT
        retval=$?
        echo
        [ $retval -eq 0 ] && rm -f $lockfile
        return $retval
    }
    
    restart() {
        configtest || return $?
        stop
        sleep 1
        start
    }
    
    reload() {
        configtest || return $?
        echo -n $"Reloading $prog: "
        killproc $nginx -HUP
        RETVAL=$?
        echo
    }
    
    force_reload() {
        restart
    }
    
    configtest() {
        $nginx -t -c $NGINX_CONF_FILE
    }
    
    rh_status() {
        status $prog
    }
    
    rh_status_q() {
        rh_status >/dev/null 2>&1
    }
    
    case "$1" in
        start)
            rh_status_q && exit 0
            $1
            ;;
        stop)
            rh_status_q || exit 0
            $1
            ;;
        restart|configtest)
            $1
            ;;
        reload)
            rh_status_q || exit 7
            $1
            ;;
        force-reload)
            force_reload
            ;;
        status)
            rh_status
        ;;
        condrestart|try-restart)
            rh_status_q || exit 0
                ;;
        *)
            echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
            exit 2
    esac
  3. 起動スクリプトに実行権限を付与します。
    $ sudo chmod +x /etc/init.d/nginx 
  4. 自動起動の設定をします。
    $ sudo chkconfig --add nginx
    $ sudo chkconfig nginx on
    これで、serviceコマンドでも起動・終了・再起動が実行できるようになります。
  5. 自動起動の設定(ランレベル)を確認します。
    $ sudo chkconfig --list nginx
    これで、
    nginx 0:off 1:off 2:on 3:on 4:on 5:on 6:off
    と表示されたらOKです。

基本操作

バーチャルホストの設定

(参考)nginx の バーチャルホスト設定 - hogeskyの日記
http://d.hatena.ne.jp/hogesky/20120416/1334588838

バーチャルホスト設定ファイルの置き場を作る
バーチャルホストの設定は、nginx のインストールディレクトリにある nginx.conf に記述する。
このファイルに各ドメインの設定をそのままベタ書きしてもいいのだけど、そうすると管理が煩わしくなるので、ドメインごとに設定ファイルを作り、nginx.conf から読み込ませるようにする。
 
まず、nginxのインストールディレクトリにドメイン毎の設定ファイルを収めるディレクトリを作る。

sudo mkdir /usr/local/nginx/sites-available
sudo mkdir /usr/local/nginx/sites-enabled

Apache2 風の構成。
sites-available にドメイン毎の設定ファイルを置き、sites-enabled からシンボリックリンクを張り、nginx.conf からは sites-enabled を読み込ませるようにする。
こういうふうにしておくメリットは、いくつかある。
 
・バーチャルホストの使用/不使用を簡単に切り替えられる。
・あるドメインの利用を一時的に止めるときは、単にシンボリックリンクを削除するだけで済むし、再開するときはリンクを作り直すだけでいい。
・あるドメインが別のサーバに引越す際に、設定ファイルをそのまま持ち越せる。
・ドメイン毎に設定ファイルが分かれているため、編集失敗の影響が他に及びにくい。
 
ディレクトリを作ったら、nginx.conf の httpセクションに次の1行を加える。 

include /usr/local/nginx/sites-enabled/*;

記述場所は、33行目の「#gzip on;」の後あたりが分かりやすい。(serverセクションの中に入れてはいけない。)

なるほど~!(・∀・)

  1. Ubuntu+Apache2風のフォルダを用意して、バーチャルホストの設定ファイルの置き場所にする。
  2. バーチャルホストの設定(「server」セクションの部分)を、別ファイルに切り出して置く。
  3. シンボリックリンクで、バーチャルホストの稼動状態を切り替える。

バーチャルホストの数が少なくて、手動で管理するなら、この手法で十分でしょう。
(=もっと多くなったら、RDBを使って管理した方が良い?)

上記の方法をちょっと手直しするなら、自分の環境だと、「/usr/local/nginx」自体がシンボリックリンクになっているので、バーチャルホストの設定ファイル置き場は、「home」ディレクトリーに「nginx」というユーザーのディレクトリーを作り、そこの置くとかが良いかな?

# cd /home
# mkdir nginx
# chown nginx:nginx nginx
# chmod 0700 nginx
# ls -la
drwx------   2 nginx  nginx  4096 Jul 14 15:06 nginx
# mkdir /home/nginx/conf/sites-available
# mkdir /home/nginx/conf/sites-enabled
# vi /usr/local/nginx/conf/nginx.conf
include /home/nginx/conf/sites-enabled/*;

というかんじでOK。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS