ホームページ >運用・保守 >Nginx >Nginx の geo モジュールとそれを使用して負荷分散を構成する方法

Nginx の geo モジュールとそれを使用して負荷分散を構成する方法

PHPz
PHPz転載
2023-05-26 19:32:282259ブラウズ

geo ディレクティブは ngx_http_geo_module モジュールを使用します。 --without-http_geo_module が手動で設定されていない限り、デフォルトでは nginx はこのモジュールをロードします。
ngx_http_geo_module モジュールを使用して、値がクライアント IP アドレスに依存する変数を作成できます。
geo ディレクティブ
構文: geo [$address] $variable { ... }
デフォルト値: —
設定セクション: http
指定された変数からの定義クライアントの IP アドレスを取得します。デフォルトでは、nginx は $remote_addr 変数からクライアント IP アドレスを取得しますが、他の変数から取得することもできます。たとえば、

geo $remote_addr $geo {
    default 0;
    127.0.0.1 1;
}
geo $arg_ttlsa_com $geo {
    default 0;
    127.0.0.1 1;
}

この変数の値が有効な IP アドレスを表すことができない場合、nginx はアドレス「255.255.255.255」を使用します。
nginx は、cidr またはアドレス セグメントを通じてアドレスを記述し、次のパラメータをサポートします:

  • delete: 指定されたネットワークを削除します

  • ifクライアント アドレスが定義されたアドレスと一致しない場合、nginx はデフォルト値を使用します。 CIDR では、「0.0.0.0/0」を使用してデフォルト値を置き換えることができます。

  • include: アドレスと値を定義するファイルが含まれており、複数のファイルを含めることができます。

  • プロキシ: 信頼できるアドレスを定義します。リクエストが信頼できるアドレスから来た場合、nginx はその「X-Forwarded-For」ヘッダーを利用してアドレス情報を取得します。通常のアドレスと比較して、信頼できるアドレスは順番に検出されます。

  • proxy_recursive: 再帰的なアドレス検索を有効にします。再帰検索がオフになっている場合、クライアント アドレスが信頼できるアドレスと一致する場合、nginx は元のクライアント アドレスの代わりに「x-forwarded-for」の最後のアドレスを使用します。再帰的検索が有効になっている場合、クライアント アドレスが信頼できるアドレスと一致すると、nginx は信頼できるアドレスに一致しない「x-forwarded-for」内の最後のアドレスを使用して、元のクライアント アドレスを置き換えます。

  • ranges: アドレス セグメントの形式でアドレスを定義します。このパラメータは最初に配置する必要があります。アドレス ライブラリのロードを高速化するには、アドレスを昇順で定義する必要があります。

geo $country {
  default    zz;
  include    conf/geo.conf;
  delete     127.0.0.0/16;
  proxy     192.168.100.0/24;
  proxy     2001:0db8::/32;
 
  127.0.0.0/24  us;
  127.0.0.1/32  ru;
  10.1.0.0/16  ru;
  192.168.1.0/24 uk;
}
vim conf/geo.conf
10.2.0.0/16  ru;
192.168.2.0/24 ru;

アドレス セグメントの例:

geo $country {
  ranges;
  default          zz;
  127.0.0.0-127.0.0.0    us;
  127.0.0.1-127.0.0.1    ru;
  127.0.0.1-127.0.0.255   us;
  10.1.0.0-10.1.255.255   ru;
  192.168.1.0-192.168.1.255 uk;
}

geo コマンドは、主に ip に基づいて変数に値を割り当てます。したがって、地理ブロックの下で定義できるのは IP セグメントまたはネットワーク セグメントのみです。定義しないとエラーが報告されます。

geo モジュールはグローバル負荷分散を実装します
server1 : 192.168.6.101
server2 : 192.168.6.102
server3 : 192.168.6.121

テスト マシン1 ip: 192.168.6.2
テスト マシン 2 ip: 192.168.6.8
テスト マシン 3 ip: 192.168.6.189

1. 各サーバーに nginx をコンパイルしてインストールします。言った!
サーバー 1 とサーバー 2 の構成は変更していません。ホームページのみを変更しました。これはテストに適しています。
server1 :

shell $> cd /usr/local/nginx/html
shell $> rm index.html
shell $> echo "192.168.6.101" > index.html


server2:

shell $> cd /usr/local/nginx/html
shell $> rm index.html
shell $> echo "192.168.6.102" > index.html


Get their services up

shell $> /usr/local/nginx/sbin/nginx

2 .Modifyサーバー 3 の構成`

shell $> cd /usr/local/nginx/conf/
shell $> vim nginx.conf
worker_processes 1;
 
events {
  worker_connections 1024;
}
http {
  include    mime.types;
  default_type application/octet-stream;
  geo $geo {
    default default;
    192.168.6.189/32    uk;
    192.168.6.8/32     us;
#这里的子网码是 32 是因为,我是单网段测试,如果你有vlan,你可以是24 例如
# 192.168.0.0/24   tw
  }
  upstream  uk.server {
    server 192.168.6.101;
  }
  upstream  us.server {
    server 192.168.6.102;
  }
  upstream  default.server {
    server 192.168.6.121:8080;
  }
  sendfile    on;
  keepalive_timeout 65;

  server {
    listen    80;
    server_name 192.168.6.121;
    index index.html index.htm;
    root html;

    location / {
        proxy_redirect off;
        proxy_set_header host $host;
        proxy_set_header x-real-ip $remote_addr;
        proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
        proxy_pass http://$geo.server$request_uri;
    }
    error_page  500 502 503 504 /50x.html;
    location = /50x.html {
      root  html;
    }
 
  }
 
  server {
    listen    8080;
    server_name 192.168.6.121;
    location / {
      root  html;
      index index.html index.htm;
    }
  }
}


3. テスト、テスト マシン 1 でブラウザを開いて
http://192.168.6.121
display# # と入力します。

Nginx の geo モジュールとそれを使用して負荷分散を構成する方法

#nginx 設定によると、テスト マシン 1 の IP アドレスは 192.168.6.2 であるため、サーバー 3 のポート 8080 にアクセスしていることは明らかです。サーバー1のindex.htmlを変更したのでサーバー2


テストマシン2でブラウザを開きます~Enter
http://192.168.6.121
display

Nginx の geo モジュールとそれを使用して負荷分散を構成する方法#テスト マシン 3 でブラウザを開きます ~

http://192.168.6.121

テスト マシン 3 の IP は 192.168.6.189
表示:


Nginx の geo モジュールとそれを使用して負荷分散を構成する方法負荷分散が役割を果たしているのは明らかです~~~

このようにして、3 つのサーバーを異なる IDC コンピュータ ルームに配置できます。あとはデータを同期するだけです~ これの利点は、スマート DNS が訪問先 IP に応じて解析するときに相手の DNS アドレスを解析してサーバーと照合することがあるため、DNS に関するトラブルを回避できることです。 Netcom ユーザーです。彼が使用する Telecom DNS は、彼を Telecom サーバー nginx に直接照合し、アクセス IP に基づいてサーバーを照合します。このようにして、各地域の IP セグメントを収集する限り、大丈夫。# ##

以上がNginx の geo モジュールとそれを使用して負荷分散を構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。