現在位置: ホーム / Nginx Ch. / NIFTY Cloud でのNGINX Plus 導入(第3回)

NIFTY Cloud でのNGINX Plus 導入(第3回)

こんにちは、村田です。3回目はNginxのリバースプロキシ機能を利用したロードバランシングを行います。1台のNginxで処理できる負荷であれば、ロードバランシングをしない方がパフォーマンスは高いのですが、クライアントからのアクセスが多いサイト、特にBtoCのサイトではロードバランシング機能が必要になるケースが出てきます。

クラウド環境ではアプライアンスのハードウェアロードバランサーを導入しにくい場合もありますが、Nginxで解決できるケースも多くしかもコストも抑えられるので、クラウド環境との相性が良いといえます。今回の構成は以下のようなイメージになります。

設定を開始する前にデフォルトの設定を見てみましょう。

/etc/nginx/nginx.conf の設定は以下の通りです。

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

細かな設定項目は別の機会で解説をしたいと思いますが、今回の設定で重要になるのは httpディレクティブ から始まる項目です。

まず、Webサーバーとして利用するサーバー2台の nginx.conf の設定を変更します。
httpディレクティブ内に server ディレクティブを下記のように追記します。

serverディレクティブは仮想サーバーの設定を行う項目で、listen にて IPアドレスやポートもしくはホスト名(UNIXドメインソケットパス)を記述します。(ここは環境に合わせて変更してください) root ディレクティブにてドキュメントルートの設定を行います。

※ドキュメントルートの設定は serverディレクティブ内で設定することが推奨されます。

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen [WebサーバーのIPアドレスもしくはホスト名];
        root /usr/share/nginx/html;
        }
    }
}

設定が完了したら Nginx を再起動して設定を反映させます。WebサーバーのIPアドレスもしくはホスト名にアクセスを行い、サンプルページもしくは用意したコンテンツが見えることを確認してください。

# service nginx restart
nginx を停止中:                                            [  OK  ]
nginx を起動中:                                            [  OK  ]

NGINX Plus であれば以下の項目を serverディレクティブ内に記述することで、ライブで Nginx のステータスを取得できるようになります。

        location = /status {
            status;

Live load-balancing status の画面は以下のようになります。実際に動作しているところは Nginx Inc.のデモをご覧ください。

nifty-3-2

Webサーバーの準備ができたなら、ロードバランサーとして動かす Nginx の設定を行います。
設定項目は以下の3点と非常に簡単に行えます。

  1. httpディレクティブ内に upstream_backend ディレクティブの設定を記述します。
    Webサーバーとして設定たサーバーのIPアドレスもしくはホスト名を指定します。
  2. serverディレクティブを作成し、仮想サーバーの設定を行う。
    この項目は先程のWebサーバーの設定と基本は同じです。
  3. locationディレクティブを作成し、proxy_pass の設定を記述します。
    今回は location に / (ルート) を設定することで、全てのコンテンツをWebサーバーに流します。
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    upstream backend {
    server [1台目のWebサーバーのIPもしくはホスト名];
    server [2台目のWebサーバーのIPもしくはホスト名];
    }

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen [ロードバランサーのIPアドレスもしくはホスト名];
        root /usr/share/nginx/html;
        location = / {
            proxy_pass http://backend;
        }
        status_zone backend;
        location = /status {
            status;
        }
    }
}
これでNginxによるロードバランシングの設定が完了です。Nginxを再起動ます。

# service nginx restart
nginx を停止中:                                            [  OK  ]
nginx を起動中:                                            [  OK  ]

それぞれのサーバーの index.hrml にホスト名や IPアドレスを埋め込むことで視覚的にロードバランシングが行われているかを確認することができます。また、/var/log/nginx/access.log を確認することでもロードバランシングの設定効果を見ることができます。

この様に、簡単な設定でロードバランシングまで行えます。
導入の敷居も非常に低いのでWebサーバーのパフォーマンスにお困りの方は一度試してみてはいかがでしょうか。


Nginx Plus サポート


サイオスOSSよろず相談室

サイオスOSSよろず相談室(1)

問い合わせボタン

最新の記事
nginx 1.13.4 リリース 2017年08月09日
NGINX Amplify ベータ版公開中 2017年07月19日
nginx 1.13.3 リリース(CVE-2017-7529 対応) 2017年07月14日
NGINX Plus R12 p3 メンテナンスリリース 2017年06月30日
nginx 1.13.2 リリース 2017年06月28日
【特別企画】 NGINX MANIAX セミナー Vol.1 2017年05月30日
Nginxの Mainline Version の新リリースバージョン nginx 1.13.0 リリース、安定バージョンの nginx 1.12 も公開 2017年04月26日
Nginx 1.11.12 リリース(Nginx 1.11.11のCPU占有問題へのBugFix) 2017年03月27日
NGINX Plus R12 リリース 2017年03月22日
nginx 1.11.11 リリース 2017年03月22日
nginx 1.11.10 リリース 2017年02月15日
nginx 1.11.9 リリース 2017年01月24日
nginx 1.11.7 リリース 2016年12月16日
nginx 1.11.6 リリース 2016年11月16日
NGINX Plus R11 リリース 2016年10月25日
NGINX Plus R10 リリース 2016年09月23日
nginx 1.11.4 リリース 2016年09月22日
Nginx 1.11.3 リリース 2016年07月27日
NGINX Plus R9 リリース 2016年04月20日
nginx 1.9.14 がリリース - OpenSSL 1.1.0 の互換性やHTTP/2上の機能改善 - 2016年04月06日
nginx 1.9.11 がリリース - dynamic modules を追加 - 2016年02月10日
nginx 1.9.10 がリリース、3つの脆弱性問題を修正 2016年01月28日
NGINX Plus Release8 リリース 2016年01月20日
nginx 1.9.9 および nginx 1.9.8 がリリース 2015年12月15日
Nginx 1.9.7 がリリースされました。 2015年11月18日
Nginx 1.9.6 がリリースされました。 2015年10月28日
HTTP/2 に対応した Nginx 1.9.5 がリリースされました。 2015年09月25日
NGINX Plus Release 7 リリース 2015年09月17日
Nginx 1.9.4 がリリースされました。 2015年08月19日
Nginx 1.9.3 がリリースされました。 2015年07月15日
nginx開発者コメント:nginx 1.8およびnginx 1.9リリースについて 2015年07月03日
NGINX Plus R6の高い可用性 2015年07月01日
Nginx 1.9.2 がリリースされました。 2015年06月17日
Nginx 1.9.1 リリース ~デフォルトでSSLv3がdisabledに 2015年05月27日
Nginx 1.9.0 がリリースされました 2015年04月29日
NGINX Plus Release6 リリース 2015年04月15日
Nginx - Web technologies of the year 2014 2015年01月14日
NGINX Plus r5 リリース 2014年12月03日
NIFTY Cloudを利用したNGINX Plusの基本的な構成の導入(第1回) 2014年09月10日
最新の記事 - もっと...