2014年 9月 の投稿一覧

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.のデモをご覧ください。

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_sios

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

こんにちは、村田です。NIFTY Cloud さんの環境をお借りしての NGINX Plus 導入の第2回目です。前回はNIFTY Cloud 上で CentOS 6.5 がインストールされた仮想サーバーの作成までを行いました。今回は作成したサーバーに対してNGINX Plus のインストールと基本設定を行いうところまでを行います。
 

OSS コミュニティ版の Nginx を yum 経由でインストールするのと手順はほとんどかわりなく、パッケージ取得の際の認証が必要になる形です。

目次 [hide]

 

仮想サーバーへのログイン

NIFTY Cloud では、コントロールパネル上で操作可能なコンソールを用意していますが、IE か Firefox が必要になります。今回はより利便性の高い SSH を使用してログインする方法でご案内したいと思います。

(1)SSHログイン

予め作成したSSHキーを任意のディレクトリに用意の上で ssh コマンドでアクセスします。
Are you sure you want to continue connecting (yes/no)? と表示されたら、yes を入力して Enter キーを押下します。

[root@localhost ~]# と表示がされればログイン成功です。

$ ssh -i [SSHキー名]_private.pem root@[IPアドレス]
Warning: Identity file [SSHキー名]_private.pem not accessible: No such file or directory.
The authenticity of host ‘[IPアドレス] ([IPアドレス])’ can’t be established.
RSA key fingerprint is aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘[IPアドレス]’ (RSA) to the list of known hosts.
[root@localhost ~]#

 

(2)NGINX Plusのインストール

CentOSの環境でNGINX Plusをインストールする場合は yumレポジトリからのインストールとなります。
SSLの設定が必要になるため、予めディレクトリの設定を行います。

# mkdir /etc/ssl/nginx
 

Nginx Inc. が用意したyumレポジトリにアクセスするためには、カスタマーポータルからSSLキーとレポジトリの情報をダウンロードする必要があります。カスタマーポータルへのアクセスには、評価版を申請頂くか、製品をご購入頂く必要があります。評価版のご相談はこちらよりご連絡ください。

カスタマーポータルにログインすると以下のようにサブスクリプションの情報が取得てきます。アクティブなサブスクリプションの「Certificate」「Private key」のリンクからnginx-repo.crtとnginx-repo.keyをダウンロードします。

nify-nginx-2-01

画面の下部に「NGINX repository setup instruction」にアクセスし、To show setup instructions please choose your OS and distribution:の項目から「RHEL6/CentOS」を選択します。

項目を選択すると下記の情報が表示されます。

Setup instruction for RHEL6/CentOS6

  • Create /etc/ssl/nginx directory
  • Move CA.crt, nginx-repo.key and nginx-repo.crt files to /etc/ssl/nginx/ directory
  • Copy nginx-plus-6.repo file to /etc/yum.repos.d/ directory
  • Run yum install nginx-plus to install nginx-plus package. Please keep in mind that old nginx package (if any)
  • will be replaced.
  • In order to upgrade from the previous version of nginx-plus, run yum upgrade nginx-plus

まず Keys and certificates より「Certificate」「Private key」をそれぞれダウンロードしてサーバーにアップロードします。
ローカルのシステムから一連のファイルをアップロードするには、以下のようにscpコマンドを使用するとよいでしょう。

$ scp -i [SSHキー名]_private.pem nginx-repo.crt root@[IPアドレス]:/etc/ssl/nginx/

CA.crt と nginx-plus-6.repo の部分がリンクになっているのでサーバー側で wget コマンドより取得します。

# cd /etc/ssl/nginx/
# wget https://cs.nginx.com/static/files/CA.crt
–2014-08-31 23:47:33–  https://cs.nginx.com/static/files/CA.crt
cs.nginx.com をDNSに問いあわせています… 206.251.xxx.xxx
cs.nginx.com|206.251.xxx.xxx|:443 に接続しています… 接続しました。
HTTP による接続要求を送信しました、応答を待っています… 200 OK
長さ: 1606 (1.6K) [application/x-x509-ca-cert]
`CA.crt’ に保存中
100%[======================================>] 1,606       –.-K/s 時間 0s

2014-08-31 23:47:35 (296 MB/s) – `CA.crt’ へ保存完了 [1606/1606]

# cd /etc/yum.repos.d/
# wget https://cs.nginx.com/static/files/nginx-plus-6.repo
–2014-08-31 23:54:37–  https://cs.nginx.com/static/files/nginx-plus-6.repo
cs.nginx.com をDNSに問いあわせています… 206.251.xxx.xxx
cs.nginx.com|206.251.xxx.xxx|:443 に接続しています… 接続しました。
HTTP による接続要求を送信しました、応答を待っています… 200 OK
長さ: 230 [application/octet-stream]
`nginx-plus-6.repo’ に保存中

100%[======================================>] 230         –.-K/s 時間 0s  

2014-08-31 23:54:38 (50.0 MB/s) – `nginx-plus-6.repo’ へ保存完了 [230/230]

 

各ファイルの送付が完了したら yum コマンドからインストールを行います。

# ls /etc/ssl/nginx/CA.crt  nginx-repo.crt  nginx-repo.key
# ls /etc/yum.repos.d/ CentOS-Base.repo      
CentOS-Media.repo  nginx-plus-6.repo CentOS-Debuginfo.repo  CentOS-Vault.repo
# yum install nginx-plus
Loaded plugins: fastestmirror, security
Determining fastest mirrors
   * base: ftp.iij.ad.jp  
   * extras: ftp.iij.ad.jp  
   * updates: ftp.iij.ad.jp
base                                                          | 3.7 kB     00:00    
extras                                                       | 3.4 kB     00:00    
nginx-plus                                               | 2.9 kB     00:00    
nginx-plus/primary_db                       |  31 kB     00:00    
updates                                                    | 3.4 kB     00:00    
updates/primary_db                            | 4.8 MB     00:00    
Setting up Install Process
Resolving Dependencies
–> Running transaction check
—> Package nginx-plus.x86_64 0:1.7.3-1.el6.ngx will be installed
–> Finished Dependency Resolution Dependencies Resolved
=================================================================
Package           Arch          Version                Repository         Size
=================================================================
Installing:  nginx-plus        x86_64        1.7.3-1.el6.ngx        nginx-plus        1.5 M Transaction Summary =================================================================
Install       1 Package(s)

Total download size: 1.5 M
Installed size: 2.1 M
Is this ok [y/N]: y
Downloading Packages: nginx-plus-1.7.3-1.el6.ngx.x86_64.rpm                    | 1.5 MB     00:01    
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction  
     Installing : nginx-plus-1.7.3-1.el6.ngx.x86_64                            1/1
———————————————————————-

Thanks for using NGINX!

Please find the documentation for NGINX Plus here:
/usr/share/nginx/html/nginx-modules-reference.pdf

More information about NGINX products is available on:
* http://nginx.com/

———————————————————————-  

Verifying  : nginx-plus-1.7.3-1.el6.ngx.x86_64                            1/1

Installed:  
  nginx-plus.x86_64 0:1.7.3-1.el6.ngx           
           
Complete!

 

※ yumインストールの途中のコメントにもあるとおり、/usr/share/nginx/html/nginx-modules-reference.pdf にドキュメントが用意されていますので、
こちらも忘れずに取得しておいて下さい。

インストールが完了したらサービスを起動すればWebサーバーとして立ち上がります。

[root@localhost ~]# /etc/init.d/nginx start
nginx を起動中:                                            [  OK  ]

以下のように「Welcome to nginx!」のページが表示されれば初期設定は完了です。

nify-nginx-2-02

次回は Nginx の設定ファイルを編集していき NGINX Plus 独自のライブステータス機能のセットアップからロードバランサーとして利用するところまでをご案内します。

OSSコミュニティ版 Nginx を使用する場合

OSSコミュニティ版 Nginx を使用する場合は yum レポジトリ作成のところで /etc/yum.repos.d/nginx.repo を作成し、設定ファイルには下記を入力します。

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1

インストールは下記のコマンドを利用します。

# yum install nginx

詳細は http://nginx.org/en/linux_packages.html#mainline をご参照下さい。

nginx_sios

NIFTY Cloudを利用したNGINX Plusの基本的な構成の導入(第1回)

こんにちは、村田です。今回、ニフティさんから環境をお借りして7月に販売開始したNGINX Plus を試す機会を頂きました。NIFTY Cloudを利用したNGINX Plusの基本的な構成の導入を3回に分けてご紹介したいと思います。

NIFTY Cloud上での仮想サーバーの作成

NIFTY Cloud へのログインができる状態になっているところから手順をご案内します。ご利用の詳細は NIFTY Cloud さんのサイトをご確認ください。

(1)NIFTY Cloud のログイン

NIFTY Cloudにログインするとダッシュボードが表示されますが、契約直後の場合は何もリソースが表示されていません。 まずはサーバーがなければ何もできませんので左のメニューより「サーバー」を選択して新規サーバーの作成を行います。

nify-nginx-01

(2)新規サーバーの作成

「+サーバー作成」のボタンを押下すると、サーバー作成画面がポップアップしてきます。

nify-nginx-02

(3)ゾーン選択

最初にサーバーを利用するゾーンを設定します。(リージョンをデータセンターとした場合にソーンはデータセンター内のどのフロアを使うのかというイメージですかね)

nify-nginx-04
*ポップアップ画面でもわかるように設定(確認)項目は9項目となり、設定後は5分程度でサーバーが立ち上がってきます。

(4)イメージ選択

OSイメージはNIFTY Cloudで用意されたイメージとカスタマイズイメージを利用できます。今回は、標準で用意されたCentOS 6.4を使います。

nify-nginx-05

(5)基本設定

ここではサーバー名とIPアドレスの設定を行います。サーバー名は後々の管理に使いますので用途がわかる名称にするとよいでしょう。今回のIPアドレスはデフォルトの固定IPアドレスを利用します。

nify-nginx-06

(6)タイプ・料金設定

タイプはサーバーの性能となりますので利用用途に応じたサイジングが重要となります。詳細はこちらのサーバータイプ・仕様一覧を参照の上で必要なサーバーを選択してください。今回の検証ではmediumを選択しました。

nify-nginx-07

(7)アカウント設定

サーバーにログインするためのSSHキーの選択、もしくは作成を行います。新規で作成する環境では「SSHキーを新規作成」から新たなSSHキーを作成します。

* SSH秘密鍵のダウンロードは1度しか行えませんので紛失にご注意ください。

nify-nginx-08

(8)スクリプト設定

サーバーが起動した際に実行するスクリプトを任意で設定できます。決められた環境を作成する場合はあらかじめシェルスクリプトを作成しておくことで起動後の作業を省略することができます。

nify-nginx-09

(9)ファイアウォール設定

サーバーに対する通信のファイアウォールの設定ができます。サーバーのファイアウォール設定と共に適切に設定することで堅牢な

nify-nginx-10

システムを構築することができます。詳細はこちらのドキュメントをご確認ください。

(10)確認

内容を確認し、「作成する」ボタンを押下したらサーバーの作成が開始されます。

nify-nginx-11

(11)サーバー作成

5分ほど待てばサーバーが自動的に立ち上がってきます。

nify-nginx-12

アカウントにログインしてからサーバーの作成まで、慣れてしまえば10分程度でできてしまうほどに分かりやすく使いやすくつくられています。この辺りは国産クラウドならではの操作性ではないでしょうか。

次回は作成したサーバーにアクセスしてNGINX PlusをWebサーバーとして使用するところまでをご案内します。

nginx_sios