序章

顧客ベースが拡大するにつれて、サーバーと顧客の間の距離も拡大します。 サーバーの負荷が増加すると、拡張できることは誰もが知っています。 しかし、距離が問題である場合はどうすればよいでしょうか。

解決策は簡単です。顧客ベースに近い地理的な場所にサーバーをインストールし、その場所に基づいてサーバーを誘導します。 しかし、費用対効果を高めながら、これを簡単に行うにはどうすればよいでしょうか。

このガイドでは、地理的に適切なサーバーを指すサブドメインに顧客を検出してリダイレクトするように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.com1.1.1.2
  • as.example.com1.1.1.3

次のようになります。

dns

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 -tservice nginx configtestまたは/etc/init.d/nginx configtest

すべてが良好な場合-Nginx構成をリロードします。

nginx -s reloadservice nginx reloadまたは/etc/init.d/nginx reload

トラフィックディレクターの動作を確認します。 ブラウザを開き、www.example.comにアクセスします。

ヨーロッパのプロキシを使用してサイトにアクセスする場合は、eu.example.comにリダイレクトする必要があります。

アジアのプロキシを使用してサイトにアクセスする場合は、as.example.comにリダイレクトする必要があります。

そしてこれから、あなたのグローバルな訪問者は彼らに最も近いサーバーにすぐにリダイレクトされ、あなたのウェブサイトでの彼らの経験を改善します。

投稿者: https ://github.com/SobanVuex