DebianまたはUbuntuでグローバルトラフィックディレクターとしてNginxを使用する方法
序章
顧客ベースが拡大するにつれて、サーバーと顧客の間の距離も拡大します。 サーバーの負荷が増加すると、拡張できることは誰もが知っています。 しかし、距離が問題である場合はどうすればよいでしょうか。
解決策は簡単です。顧客ベースに近い地理的な場所にサーバーをインストールし、その場所に基づいてサーバーを誘導します。 しかし、費用対効果を高めながら、これを簡単に行うにはどうすればよいでしょうか。
このガイドでは、地理的に適切なサーバーを指すサブドメインに顧客を検出してリダイレクトするようにNginxを構成します。
前提条件
このガイドを完了するには、sudo
権限を持つユーザーが必要です。 また、さまざまな地域でサーバーを作成する方法も知っておく必要があります。
仮定
この記事では、読みやすさのためにいくつかの前提を定めています。
- あなたのドメインは
www.example.com
です - プライマリサーバーは米国にあります
- ヨーロッパとアジア向けのGTDをインストールしたい
- サーバーIPは次のとおりです。US:
1.1.1.1
EU:1.1.1.2
AS:1.1.1.3
サブドメインとDNS構成
サブドメインの選択はすべてあなた次第です。 このチュートリアルでは、ヨーロッパではeu.example.com
を使用し、アジアではas.example.com
を使用します。
これらのサブドメインごとに、そのリージョンのサーバーのIPを使用してDNS構成にA record
を追加します。
eu.example.com
–1.1.1.2
as.example.com
–1.1.1.3
次のようになります。
NginxとGeoIPをインストールします
NginxをGeoIPモジュールで使用するには、2つのオプションがあります。1)プリコンパイル済みパッケージを使用する(-fullおよび-extraのみがGeoIPモジュールを使用)、または2)--with-http_geoip_module
構成パラメーターを使用してnginxをコンパイルする–この場合、geoip-devライブラリも必要です。
すでに利用可能なリポジトリパッケージを使用してみましょう。
sudo apt-get update
sudo apt-get install nginx-full geoip-database
これで、NginxとGeoIPの両方のバイナリが利用可能になります。 しかし、もう1つあります。GeoIPの都市データベースには地域情報が含まれています。 手動でダウンロードしてインストールする必要があります。
wget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoLiteCity.dat.gz
mv GeoLiteCity.dat /usr/share/GeoIP/
Nginxと仮想ホストを構成します
ここでは、GeoIPデータベースファイルがどこにあるかをNginxに通知します。 そして、仮想ホストでは、Nginxがgeoip情報に基づいてリクエストに応答する方法を構成します。
お好みのエディタでnginx.conf
(デフォルトは/etc/nginx/nginx.conf
)を開きます。 geoip_city /usr/share/GeoIP/GeoLiteCity.dat;
という行を追加します。 nginx.conf
は次のようになります。
http {
geoip_city /usr/share/GeoIP/GeoLiteCity.dat;
...
}
それを保存。
次に、仮想ホストを編集しましょう(デフォルトは/etc/nginx/sites-available/default
)。 内部でmap
を作成し、サブドメインをserver_name
ディレクティブに追加する必要があります。
Nginxのmap
を使用すると、$geoip_city_continent_code
の値に基づいて変数$closest_server
を設定できます。 マップモジュールの詳細については、Nginxのドキュメントをご覧ください。
map $geoip_city_continent_code $closest_server {
default www.example.com;
EU eu.example.com;
AS as.example.com;
}
次に、ロケーションベースのサブドメインを$server_name
ディレクティブに追加します。
server {
server_name example.com
www.example.com
eu.example.com
as.example.com;
...
}
プロセスの最後の部分は、訪問者を最も近いサーバーにリダイレクトする条件を仮想ホストに作成することです。 構成に次の条件を追加します。
server {
...
if ($closest_server != $host) {
rewrite ^ $scheme://$closest_server$request_uri break;
}
...
}
すべての変更が完了すると、仮想ホストファイルは次のようになります。
map $geoip_city_continent_code $closest_server {
default www.example.com;
EU eu.example.com;
AS as.example.com;
}
server {
server_name example.com
www.example.com
eu.example.com
as.example.com;
if ($closest_server != $host) {
rewrite ^ $scheme://$closest_server$request_uri break;
}
...
}
構成するサーバーごとにこの手順を繰り返します。 そうすれば、すべてのサーバーがトラフィックディレクターとして機能します。
いくつかのテストを実行します
これらのすべてのステップを完了した後、最後のステップは、実行したことをテストすることです。 Nginxを使用する場合は、適用する前に必ず新しい構成をテストしてください。
Nginxには、現在実行中のNginxに影響を与えることなく、構成ファイルをテストするオプションがあります。 これを行うには、次のいずれかのコマンドを実行します。
nginx -t
、service nginx configtest
または/etc/init.d/nginx configtest
すべてが良好な場合-Nginx構成をリロードします。
nginx -s reload
、service nginx reload
または/etc/init.d/nginx reload
トラフィックディレクターの動作を確認します。 ブラウザを開き、www.example.com
にアクセスします。
ヨーロッパのプロキシを使用してサイトにアクセスする場合は、eu.example.com
にリダイレクトする必要があります。
アジアのプロキシを使用してサイトにアクセスする場合は、as.example.com
にリダイレクトする必要があります。
そしてこれから、あなたのグローバルな訪問者は彼らに最も近いサーバーにすぐにリダイレクトされ、あなたのウェブサイトでの彼らの経験を改善します。