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 関数呼び出し、適用、バインド メソッドのケース スタディ

推薦する

Linux\Nginx 環境での仮想ドメイン名の設定とテスト検証

Nginx 仮想ドメイン名設定を使用すると、ドメイン名を購入せずに特定のドメイン名を介してローカル ...

Linux でネットワーク パケット損失と遅延をシミュレートする方法

netem と tc: netem は、Linux カーネル バージョン 2.6 以降で提供されるネ...

Linuxのtopコマンド出力の詳細な説明

序文皆さんは Linux で top コマンドを使ったことがあると思います。私は Linux に触れ...

ユーザーエクスペリエンスの76の経験ポイントの要約

ウェブサイト体験の分類1. 感覚体験:快適性を重視した視聴覚体験をユーザーに提供します。 2. イン...

MySQL ログの設定と表示方法

MySQL には次のログがあります。エラーログ: -log-errクエリログ: -logスロークエリ...

CSS3 で Taobao に空白スペースを実装する方法

Taobao用の空白スペースを作成します。 ブラウザページを縮小すると、コンテンツ領域は縮小されませ...

Mysql5.7 サービスを開始できません。グラフィカル ソリューション チュートリアル

p>「サービス」で手動で起動すると、 コンソールから起動します: 次に、...\MySQL S...

英語の単語の出現頻度を数えるtrコマンドの魔法

置換を削除したり文字列を削除したりできる tr コマンドは、誰もがよく知っています。 英語では、英語...

Linux で MySQL 5.7.19 をアンインストールする方法

1. MySQLが以前にインストールされていたかどうかを確認するコマンド: rpm -qa|grep...

Vue3 ミックスインの使い方

目次1. mixin の使い方は? 2. ミックスイン使用時の注意2.1. ミックスイン オブジェク...

MySQL で datetime 型のデフォルト値を設定する方法

Navicat クライアントを通じてデフォルトの日時値を変更する際に問題が発生しました。データベース...

Zabbix による VMware Exsi ホストの監視のグラフィカルな手順

1. 仮想化 vcenter に入り、ブラウザでログインし (クライアントは設定する場所を見つけませ...

大規模なウェブサイトアーキテクチャを設計・構築する際に考慮すべき10の課題

ここでは、PHP、JSP、または .NET 環境については説明しません。アーキテクチャの観点から問題...

Docker Gitlab+Jenkins+Harborは永続的なプラットフォーム運用を構築します

CI/CD の概要CIワークフロー設計Gitコードバージョン管理システムはコマンドラインでのみ管理で...

WeChatアプレットは日付と時刻に基づいた並べ替え機能を実装

最近、小さなプログラム プロジェクトを引き継いだのですが、リストを日付と時刻で並べ替えるという要件が...