Nginx の realip モジュールの使い方の基礎学習

Nginx の realip モジュールの使い方の基礎学習

序文

nginx モジュールには、公式とサードパーティの 2 種類があります。nginx のインストール情報を表示するには、コマンド nginx -V を使用し、--with nginx 起動時の読み込みに関する次のモジュール情報を確認できます。

realipモジュール

目的:ローカル Nginx がリバース プロキシ バックエンドにある場合、ユーザーの実際の IP アドレスを取得できます。

使用方法: realip 関数では、Nginx が ngx_http_realip_module モジュールを追加する必要がありますが、これはデフォルトではコンパイルされません。追加する必要がある場合は、コンパイル時に --with-http_realip_module オプションを追加して有効にしてください。

リアリップスコープ

set_real_ip_from、real_ip_header、real_ip_recursive はすべて、http、サーバー、およびロケーション ゾーン構成で使用できます。

いくつかの realip パラメータの説明

  • set_real_ip_from: リバースプロキシサーバーを設定します。つまり、サーバーのIPを信頼します。
  • real_ip_header X-Forwarded-For: ユーザーの実際の IP アドレスは、X-Forwarded-For リクエスト ヘッダーにあります。
  • リアルIP再帰:
    • off: real_ip_headerで指定されたHTTPヘッダーの最後のIPが実際のIPとして使用されます。
    • on: real_ip_headerで指定されたHTTPヘッダーの最後のIPが信頼されたサーバーではない場合、実際のIPとして扱われます。

http ヘッダーの X-Forwarded-For、X-Real-IP、およびリモート アドレスの説明

X-Forwarded-For は HTTP リクエスト ヘッダーにあり、HTTP リクエストの終了時の実際の IP アドレスを示すために使用される HTTP の拡張ヘッダーです。

形式は次のとおりです。

X-Forwarded-For: クライアント、プロキシ1、プロキシ2

Nginx プロキシは通常、次のように構成されます。

proxy_set_header ホスト $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

説明する:

  • X-Forwarded-For: Nginx が追加しますが、先頭部分は nginx が受信したリクエスト ヘッダーから取得されるため、この部分はあまり信頼できません。 IP 形式に準拠したもののみを使用できます。そうでない場合、XSS または SQL インジェクションの脆弱性が発生しやすくなります。
  • リモート アドレス: HTTP プロトコルには IP の概念がありません。リモート アドレスは TCP 接続から取得され、サーバーとの TCP 接続を確立するデバイスの IP を示します。したがって、リモート アドレスを偽造することはできません。
  • X-Real-IP: HTTP プロキシは、TCP 接続を確立するデバイスの IP アドレスを示すために使用されます。このデバイスは、別のプロキシの場合もあれば、実際の要求側の場合もあります。

Realip関数の例

以下に簡単なアーキテクチャ図を示します。

仮定1:

1. Nginx が realip モジュールを使用しない場合、2 番目の Nginx の X-Forwarded-For リクエストは 1.1.1.1 ですが、remote_addr アドレスは 2.2.2.2 です。このとき、アプリケーション サービスは X-Forwarded-For フィールドを通じてユーザーの実際の IP を取得できます。ただし、ここにはリスクがあります。中間に複数の層のリバース プロキシ サービスがある場合、一意のユーザーの実際の IP を取得することは不可能になります。

2. Nginx が realip モジュールを使用し、次のように設定されている場合、Nginx は X-Forwarded-For の最後の IP (2.2.2.2) を実際の IP として取得します。最後に、アプリケーション サービスによって取得されるアドレスも 2.2.2.2 ですが、実はこれはユーザーの IP ではありません。

2.2.2.2 から実際の IP を設定します。
2.2.2.3 から set_real_ip_from; 
real_ip_header X-Forwarded-For; 
real_ip_recursive をオフ;

3. Nginx が realip モジュールを使用し、次のように設定されている場合、2.2.2.2 は信頼できるサーバー IP であるため、Nginx は前方検索を続行し、1.1.1.1 が信頼できるサーバー IP ではないことを検出すると、それを実際の IP と見なします。しかし、実際には 1.1.1.1 はユーザーの IP です。最後に、アプリケーション サービスはユーザーの固有の実際の IP も取得します。

2.2.2.2 から実際の IP を設定します。
2.2.2.3 から set_real_ip_from; 
real_ip_header X-Forwarded-For; 
real_ip_recursive オン;

要約する

Nginx 基礎学習における realip モジュールの使用に関するこの記事はこれで終わりです。Nginx realip モジュールの使用に関する詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nginx レベルで基本的なユーザー認証を構成する手順を完了します。
  • Nginxの基本についての簡単な紹介
  • Nginx の基本 - Gzip 設定ガイド
  • Nginx サーバーの基本的なセキュリティ構成といくつかのセキュリティのヒント
  • nginxの基本設定の説明
  • nginxの基礎を学ぶ

<<:  mysql-8.0.19-winx64 をインストールしてログインするための初心者向けチュートリアル (初心者必読)

>>:  JavaScript 関数呼び出し、適用、バインド メソッドのケース スタディ

推薦する

Vue3 setup() の高度な使用例の詳細な説明

目次1. オプションAPIと組み合わせAPIの違い2. セットアップを具体的にどのように使用するので...

怖いハロウィーン Linux コマンド

ハロウィーンではありませんが、Linux の不気味な側面に注目する価値はあります。幽霊、魔女、ゾンビ...

Dell R720 サーバーに Windows Server 2008 R2 をインストールする方法

注: この記事のすべての写真はインターネットから収集されたものであるため、DELL R720 サーバ...

XHTMLにおけるH1タグの位置について

最近、H1 については多くの議論が行われていますが (記事のコンテンツ ページ内)、おおよそ 2 つ...

CSS スタイルを変更してグレーの Web ページ (色なし、明るい白黒のみ) を実現するいくつかの方法

通常、清明節、国哀悼日、大地震の日、影響力のある偉人の死去または命日には、ウェブマスターとして、故人...

MAC+PyCharm+Flask+Vue.js ビルドシステム

目次node.js+nvm+npm を設定するnpmスイッチタオバオミラーVue.jsをインストール...

写真とテキストによる MySQL 8.0.21 インストール チュートリアル

1. ダウンロードリンクをダウンロードするダウンロードをクリックします。Oracle アカウントにロ...

Dockerデータ管理とネットワーク通信の使用

Docker をインストールし、Docker コアとインストールを通じて簡単な操作を実行できます。 ...

MySQLはテーブルデータを復元するためにfrmファイルとibdファイルを使用します

目次frm ファイルと ibd ファイルの紹介frm ファイル回復テーブル構造ibd ファイル回復テ...

MySQL 8.0.23 のインストールと設定方法のグラフィックチュートリアル (Win10 の場合)

この記事では、MySQL 8.0.23のインストールと設定方法を参考までに紹介します。具体的な内容は...

MySQL 5.7.18 のインストール中に MySQL サービスの起動に失敗する問題の解決策

MySQL は非常に強力なリレーショナル データベースです。しかし、初心者の中には、インストールや設...

MySQL 8.0 のデフォルトのデータディレクトリを変更する (設定なしの簡単な操作)

使用シナリオ: Alibaba Cloud を使用しており、データディスクを別途購入しました (大容...

CSS クロスブラウザ スタイルのバグのデバッグについて

まず最初に、適切なブラウザを選択します。私が Chrome を選択したのは、その強力なデバッグ ツー...

一般的なDocker Composeコマンドの詳細な説明

1. Docker Compose の使用方法は docker コマンドの使用方法と非常に似ています...