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標準の価値を議論する

推薦する

Dockerコンテナの構築と実行のプロセスの詳細な説明

イメージをプルし、コンテナを作成してコンテナを実行するだけです。 docker run -d --r...

よく使うLinuxコマンドのまとめ

私は2年間運用保守に携わり、多くのコマンドを使用しました。特定のLinuxコマンドを習得すると、どれ...

Javascript を使用して、スライドバー効果のあるスライドナビゲーション プラグインを開発します。

目次1. はじめに2. 使用方法3. 開発プロセス1. モデル例2. イベントとアニメーション4. ...

MySQL の起動時に InnoDB エンジンが無効になる問題の解決方法

問題を見つける今日、仕事中に、ローカル データベースから仮想マシン CentOS 6.6 上のデータ...

mysqldump を使用した MySql のインポートおよびエクスポート方法の概要

データベースデータをエクスポートします:まずcmdを開いてMySQLのbinフォルダに入ります1. ...

MySQL 8.0.12 のインストールと設定のチュートリアル

この記事はMySQL 8.0.12のインストールと設定に関する詳細なチュートリアルを記録しています。...

Linux でのルーティングと仮想マシン ネットワークの設定に関する詳細なグラフィック説明

ルーティングとは何ですか?ルーティングとは、相互接続されたネットワークを介して送信元ステーションから...

CSS におけるスタックコンテキストの具体的な使用法

序文一部の CSS 相互作用の影響により、要素に設定されたz-index実際のサイズに応じて重ね合わ...

MySQLの主キーと外部キーの使用と説明を簡単に説明します

目次1. 外部キー制約外部キーとは何ですか?外部キーを使用する条件:外部キーの定義構文は次のとおりで...

HTML チュートリアル、HTML デフォルト スタイル

html 、アドレス、引用、本文、 dd 、 div 、 dl 、 dt 、フィールドセット、フォ...

js、css、htmlはブラウザのさまざまなバージョンを決定します

正規表現を使用してIEブラウザのバージョンを判別するIEブラウザかどうか確認するif (docume...

MySQL の低速クエリの最適化: 理論と実践からの制限の利点

多くの場合、クエリの結果は最大で 1 つのデータ レコードになることが予想されます。この場合、制限 ...

CSSの使用に関する深い理解 clear:both

clear:both清除浮動これは私が常に持っていた印象ですが、私はこれをめったに使用せず、私の理...

Dockerコマンドの学習を1つの記事にまとめる

目次導入ミラーリポジトリログイン引く押す検索ローカル画像管理画像rmiタグ建てる歴史保存負荷輸入コン...

Vue2.0でデータの双方向バインディング機能をjsを使って実装する

Object.definePropertyの理解文法:オブジェクト.defineProperty(o...