リクエスト IP の最後のセグメントに基づいてトラフィックを分割するように Nginx を構成する方法

リクエスト IP の最後のセグメントに基づいてトラフィックを分割するように Nginx を構成する方法

これは主に、場所パラメータのif判断の設定ジャンプです。迂回により、サーバーの負荷と圧力を軽減できます。これは非常に一般的なサーバー展開アーキテクチャです。
IPの最後のセグメントの範囲に応じてジャンプする

#ドメイン名、IP、ポートなどの情報はご自身で変更してくださいupstream huaji-01.com {
 サーバー 192.168.1.100:8080;
}

アップストリーム huaji-02.com {
 サーバー 192.168.1.200:8080;
}

サーバー{

 聞く 80;
 サーバー名 www.huaji.com;

 位置 /
 {
  $remote_addr ~* ^(.*)\.(.*)\.(.*)\.[1,125]$) の場合 {
    プロキシパス http://huaji-01.com;
    壊す;
  }

  proxy_pass http://huaji-02.com;
 }

}

上記の例では、IPアドレスが1~125で終わるリクエストをhuaji-01.comに転送し、それ以外はhuaji-02.comに転送します。正規表現を変更することもできます。たとえば、

ルール: $remote_addr ~* ^(.*)\.(.*)\.(.*)\.*[0268]$ 0268 で終わる偶数 IP は huaji-01.com にジャンプし、その他は 2 番目のドメイン名にジャンプします。

ルール: $remote_addr ~* ^(112)\.(.*)\.(.*)\.(.*)$ 112 で始まる IP は指定されたドメイン名にリダイレクトされます。

ルール: $http_x_forwarded_for ~* ^(112)\.(.*)\.(.*)\.(.*)$ 転送アドレスセグメントに基づいてトラフィックを転送し、112 で始まるトラフィックを指定されたドメイン名にリダイレクトします。

if命令条件判断の意味:

正規表現のマッチング:

大文字と小文字を区別するマッチングの場合 ~

~*は大文字と小文字を区別しないマッチングです

!~ と !~* は、それぞれ大文字と小文字を区別する一致と大文字と小文字を区別しない一致です。

ファイルとディレクトリの一致。ここで:

-f と !-f はファイルが存在するかどうかを判断するために使用されます

-dと!-dはディレクトリが存在するかどうかを判断するために使用されます

-e と !-e はファイルまたはディレクトリが存在するかどうかを判断するために使用されます

-xと!-xはファイルが実行可能かどうかを判断するために使用されます

書き換えディレクティブの最後のパラメータはフラグ タグであり、次のものが含まれます。

last は Apache の [L] フラグに相当し、書き換えを意味します。

break このルールが一致すると、一致は終了し、次のルールは一致しなくなります。

リダイレクトは 302 一時リダイレクトを返し、ブラウザ アドレスにはジャンプ後の URL アドレスが表示されます。

permanent は 301 永続リダイレクトを返し、ブラウザ アドレスにはジャンプ後の URL アドレスが表示されます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Nginx リバース プロキシを介して IP アクセス転送を実装するためのサンプル コード

<<:  Vueは遅延読み込みによりページの応答速度を向上

>>:  MySQL クエリのパケットが大きすぎる問題と解決策

推薦する

CentOS 6.8 での Hadoop 3.1.1 完全分散インストール ガイド (推奨)

上記:このドキュメントは、3 台の仮想マシンが相互に ping を実行できること、ファイアウォールが...

よく使用される Linux コマンドの完全なリスト (推奨コレクション)

目次1. システム情報2. シャットダウン(システムのシャットダウン、再起動、ログアウト) 3. フ...

MySQL 文字列分割操作 (区切り文字を含む文字列のインターセプション)

区切り文字なしの文字列抽出質問の要件データベース内のフィールド値:実装効果: 1行のデータを複数行に...

Jenkins初心者のためのDockerデプロイメントチュートリアルの詳細な説明

この記事では、docker 経由で Jenkins+Maven+SVN+Tomcat をデプロイし、...

Nginx ドメイン転送の使用シナリオ コード例

シナリオ 1: サーバーの制限により、外部に開かれているポートは 1 つだけですが、別の外部ネットワ...

MySQL のジオメトリ型を使用して経度と緯度の距離の問題を処理する方法

テーブルを作成する テーブル `map` を作成します ( `id` int(11) NULLではな...

Vue で Graphql インターフェースを実装する例

注意:この記事は現在取り組んでいる nestjs+graphql+serverless 合宿における...

MySQL PHP 構文の簡単な分析

まずcharAt関数の基本的な構文を見てみましょう文字 = str.charAt(インデックス) c...

VMware12 で Ubuntu19.04 デスクトップ版をインストールする (インストール チュートリアル)

1. 実験の説明仮想マシンに、 Ubuntu 19.04オペレーティングシステムを手動でインストー...

略語マークと頭字語マーク

<abbr>タグと<acronym>タグは、Web ページに表示される略語と...

Vue はモバイル端末にマルチグリッド入力ボックスを実装

最近、同社は、下図に示すように、h5 ページ操作を完了するという要件を提示しました。 ネットで入手で...

歴史的な Linux 画像処理および修復ソリューション

従来の Linux イメージで作成された ECS クラウド サーバーには、NTP と YUM が設定...

CSS calc() の数式に関する詳細な理解

数式 calc() は CSS の関数であり、主に数学演算に使用されます。 calc() を使用する...

JavaScript でオブジェクトをエレガントに扱う 6 つの方法

目次序文1. オブジェクト.freeze() 2. オブジェクト.seal() 3. オブジェクト....

Dockerコミットの使い方の詳しい説明

場合によっては、ベースイメージに特定の依存関係をインストールする必要があります。Dockerfile...