Nginxを開発したIgor Sysoev氏が目標としたのは、高速なWebアクセラレーションです。Webアクセラレーターは本来のWebサーバーの代わりにクライアントからのリクエストを受け付け、サーバーからのレスポンスをキャッシュ、または複数のサーバーに分散させることでレスポンスを高速化します。この際重要になるのが、リバースプロキシ/ロードバランシング機能です。
Webコンテンツをキャッシュし、反応の遅いWebサイトに代わって応答する一般的なプロキシを「フォワードプロキシ」と呼ぶのに対し、「リバースプロキシ」はクライアントからのリクエストをいったん中継し、他のWebサーバーへリクエストを振り分けます。Nginxはリバースプロキシで、複数のWebサーバーにリクエスト振り分けることでロードバランシングを実現しています。
例えば「http://Nginxのアドレス/foo」へのアクセスを「192.168.0.2」と「192.168.0.3」にロードバランシングするには、次のようにします。
http { <--http {...}に以下内容を追加
...
upstream mycluster { <--クラスター「mycluster」を定義
server 192.168.0.2 weight=3; <--クラスターメンバー(重み3)
server 192.168.0.3; <--クラスターメンバー(重みなし)
}
server { <--server {...}に以下内容を追加
location /foo { <--ロードバランシングされる対象URL(各サーバーに「/foo」を用意しておく)
proxy_set_header X-Real-IP $remote_addr; <--ヘッダー情報の書き換え(必要に応じて)
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header Host $host;
proxy_pass http://mycluster; <--「mycluster」を指定
}
}
...
上の設定例では、リクエストが分散される割合を変えています。192.168.0.2に対し「weight」(重み)を指定し、4リクエストのうち、3リクエストが192.168.0.2に、1リクエストだけが192.168.0.3に割り振られるようにしています。サーバーの処理能力に応じて、weightを設定します。
Copyright © ITmedia, Inc. All Rights Reserved.