NGINXとマルチロケーションVPSホスティングでウェブサイトのロードバランスを取る方法
5分で読めます - 2025年7月7日

NGINXを使用して、複数の場所にあるVPSサーバーにWebサイトのトラフィックを分散します。ロードバランシングを設定し、単一障害点を回避し、パフォーマンスを向上させる方法を学びます。
NGINXとマルチロケーションVPSでWebサイトをロードバランスする方法
地理的に異なる場所にある複数のVPSインスタンス間でWebサイトをロードバランシングすると、パフォーマンスを向上させ、待ち時間を短縮し、冗長性を高めることができます。NGINXをリバースプロキシとして使用することで、Webサイトやアプリケーションのコピーをホストするバックエンドサーバ間でトラフィックを分散できます。
このガイドでは、セットアップの手順を説明し、ベストプラクティスを紹介し、リバースプロキシに単一障害点をもたらすという一般的な落とし穴を、それを軽減するソリューションとともに取り上げます。
ステップ1:異なるリージョンにVPSサーバを配置する
例えば、ニューヨークに1台、フランクフルトに1台、シンガポールに1台といったように、複数の地域にVPSインスタンスを配置することから始めます。各VPSは以下のものを実行する必要があります:
- ウェブサイトまたはアプリケーションのコピー
- NGINX(ローカルのウェブサーバーとしても使用する場合)
- セットアップとメンテナンスのためのSSHアクセス
すべてのサーバーでコンテンツと設定が一貫していることを確認してください。
ステップ2: ロードバランサーとして動作するVPSのセットアップ
リバースプロキシおよびロードバランサーとして動作するVPSを1つ選択するか、この目的のために新しいVPSをプロビジョニングします。このサーバはバックエンドのVPSノードにトラフィックをルーティングします。
アップストリームグループを定義し、バックエンドノードへのリクエストをプロキシする基本的なNGINXリバースプロキシ設定を使用します。
以下は、プロキシ用のNGINX設定の例です。
http {
upstream backend_servers {
server vps1.example.com;
server vps2.example.com;
server vps3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
ステップ3:単一障害点への対処
問題点
NGINX リバースプロキシをホストしている VPS が単一障害点となります。このサーバがダウンすると、バックエンドサーバが稼動しているにもかかわらず、サイト全体が利用できなくなります。
解決方法
オプション1:フローティングIPによる高可用性
Keepalivedや VRRP付きPacemakerなどのツールを使用して、2つ以上のNGINXノード間にフローティングIPを作成します。1つのノードに障害が発生すると、IPは自動的に別のノードに切り替わります。
オプション2:DNSレベルのロードバランシング
複数のNGINXロードバランサーノードを実行し、ラウンドロビンDNSまたはGeoDNS(AWS Route 53、Cloudflare Load Balancingなど)を使用してトラフィックを分散します。
オプション3:エニーキャストIP(上級者向け)
BGPとエニーキャストを使用して、複数の地域から同じIPアドレスをアドバタイズします。トラフィックはユーザーの位置に基づいて最も近いノードに自動的にルーティングされます。
ヒントDNSベースの地理的ルーティングと可用性の高いNGINXプロキシを組み合わせることで、最高のカバレッジと回復力が得られます。
ステップ4:ヘルスチェックとフェイルオーバーロジック
NGINX Open Sourceはアクティブなヘルスチェックをネイティブではサポートしていませんが、接続エラーが発生すると障害が発生したノードへのルーティングを停止します。より高度なヘルスチェックには
- NGINX Plusを使用する
- または、cron + curl + config reloadsで外部監視とフェイルオーバーロジックを構築します。
ステップ 5: ドメインをロードバランサーに向ける
DNSレコードを更新して、NGINXリバースプロキシのIPアドレス(HAを使用している場合はフローティングIP)を指すようにします。複数のプロキシを使用する場合は、ロードバランシングまたはジオアウェア解決のためにDNSプロバイダを設定します。
オプション:地理位置を考慮したルーティング
NGINX 自体はジオロケーションベースのルーティングを処理しません:
- GeoDNS:ユーザーを最も近いサーバーにルーティングする DNS プロバイダーを使用します。
- エニーキャストIP:複数のデータセンターから同じIPを配布し、グローバルルーティングの最適化を可能にします。
ユーザーリクエスト | v +---------------------+ | GeoDNS / ロードアウェア | DNS ルーティングレイヤー | +---------------------+ | v +---------------------+ | 地域 NGINX プロキシ | (HA または Anycast IP) | +---------------------+ | v +---------------------+ | VPS バックエンドノード |
+---------------------+
最終的な考察
NGINXを使用して複数のVPSサーバー間でロードバランスをとることで、グローバルに拡張し、レイテンシを減らすことができます。しかし、覚えておいてください:リバースプロキシは可用性が高くなければなりません。
単一障害点を排除するには、DNSベースの負荷分散、フローティングIP、またはエニーキャスト・ネットワーキングを検討してください。慎重に計画を立てれば、マルチロケーションのVPSセットアップで、高速で耐障害性の高いパフォーマンスを大規模に提供することができます。
このガイドはウェブフロントエンドにのみ適しており、データベースへの接続や、高可用性のためにこれを分散させる問題や解決策についてはカバーしていません。これについては、また後日取り上げたいと思います。

VPSにRedisをインストールして使用する方法
アプリケーションのパフォーマンス、セキュリティ、管理を最適化するために、VPSにRedisをインストールして設定する方法をご紹介します。
9分で読めます - 2026年1月7日
専用サーバーやVPSの監視、2025年のオプションは?
12分で読めます - 2025年11月28日

ご質問またはカスタムソリューションが必要ですか?
柔軟なオプション
グローバル・リーチ
即時配備
柔軟なオプション
グローバル・リーチ
即時配備