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.