nginxを使用して取得したIPアドレスが127.0.0.1である問題を解決する

nginxを使用して取得したIPアドレスが127.0.0.1である問題を解決する

IPツールを取得

lombok.extern.slf4j.Slf4j をインポートします。
org.apache.commons.lang3.StringUtils をインポートします。

javax.servlet.http.HttpServletRequest をインポートします。

/**
 * IPアドレス *
 * @日付 2020年3月6日 午後12時57分02秒
 */
翻訳者
パブリッククラス IPUtils {

    /**
     * IPアドレスを取得 * 
     * Nginx などのリバース プロキシ ソフトウェアを使用している場合、request.getRemoteAddr() で IP アドレスを取得することはできません。* 複数のレベルのリバース プロキシを使用している場合、X-Forwarded-For の値は 1 つではなく、IP アドレスの文字列になります。X-Forwarded-For で不明ではない最初の有効な IP 文字列が実際の IP アドレスです。*/
    パブリック静的文字列 getIpAddr(HttpServletRequest リクエスト) {
        文字列 ip = null;
        試す {
            ip = リクエスト.getHeader("x-forwarded-for");
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("プロキシクライアントIP");
            }
            if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = リクエスト.getHeader("HTTP_CLIENT_IP");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = リクエスト.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = リクエスト.getRemoteAddr();
            }
        } キャッチ (例外 e) {
            log.error("IPUtils エラー ", e);
        }
        
        //プロキシを使用して最初のIPアドレスを取得します if(StringUtils.isEmpty(ip) && ip.length() > 15) {
            ip.indexOf(",") > 0 の場合
                ip = ip.substring(0, ip.indexOf(","));
            }
        }
        
        IP を返します。
    }
    
}

nginxを使用する場合、取得するIPは127.0.0.1になります。

プロキシに次の構成を追加します: proxy_set_header x-forwarded-for $remote_addr;

サーバー{
        聞く 80;
        サーバー名 api.qimen.pro;
        # サーバーファイルアップロードサイズ制限 client_max_body_size 10M;
        位置 / {
            proxy_pass http://gymserver;
            proxy_set_header x-forwarded-for $remote_addr;
        }
    }

nginx を使用して 127.0.0.1 の IP アドレスを取得する問題を解決するこの記事はこれで終わりです。nginx で IP アドレスを取得する問題の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nginx を使用して IP アドレスが悪意を持って解決されるのを防ぐ方法
  • 単一の Nginx IP アドレスに複数の SSL 証明書を設定する例

<<:  MySQL の null 制約のケースの説明

>>:  マインドマップを使って4つの側面からWeb標準の価値を議論する

推薦する

JavaScript の数値および数学オブジェクトの概要

目次1. JavaScript における数値2. Javascript の Math オブジェクト1...

Docker環境でJenkinsを設定すると、タスクをビルドするときにコンソールログに文字化けした中国語の文字が表示されます

目次1. 問題の説明: 2. Jenkins設定のトラブルシューティング3. コードログのエンコード...

MySQL マルチバージョン同時実行制御メカニズム (MVCC) ソースコードの詳細な説明

目次1. はじめに2. MVCC (マルチバージョン同時実行制御メカニズム) 2.1 繰り返し読み取...

要素テーブルヘッダー行の高さの問題の解決

目次序文1. 問題の原因2. 解決策VueはelementUIテーブルtr thの高さと背景色を変更...

jQueryカルーセル機能を実装する方法

この記事では、jQueryカルーセル機能の実装コードを参考までに共有します。具体的な内容は次のとおり...

MySQL ストアドプロシージャとストアドファンクションの詳細な説明

1 ストアドプロシージャ1.1 ストアドプロシージャとは何かストアド プロシージャは、特定の機能を実...

Vue における LocalStorage と SessionStorage の違いと使い方

目次LocalStorageとはSessionStorageとはLocalStorage と Ses...

MySQL の 2 種類の一時テーブルの使用方法の詳細な説明

外部一時テーブルCREATE TEMPORARY TABLE によって作成された一時テーブルは、外部...

JavaScript配列の一般的なメソッドの例のまとめ

目次一般的な配列メソッドconcat() メソッドjoin() メソッドpop() メソッドpush...

VMwareを使用したPermeateレンジシステムのインストール手順の詳細説明

1. 背景私たちは時々社内研修を行っており、実験環境をよく利用しています。最初はdockerコンテナ...

MySQL InnoDB row_id 境界オーバーフロー検証方法の手順

背景クラスメートと row_id の境界問題について話し合ったので、ここで詳しく説明します。 Inn...

フラットスタイルを使用してウェブサイトをデザインする方法

フラットなウェブサイト構造の本質はシンプルさです。コンテンツの重要なポイントを強調し、ページの装飾効...

SQL文でのgroup byの使用について簡単に説明します

1. 概要Group by は、by の後の規則に従ってデータをグループ化することを意味します。いわ...

Dockerコンテナのいくつかの保存方法の詳細な説明

目次前面に書かれた複数のストレージマウント方法1.バインドマウント2. 巻数3.tmpfsマウントス...

Dockerコンテナの原理の分析

目次01 コンテナの本質とは何か? 02 Cgroupテクノロジーと名前空間テクノロジーの概要03 ...