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

推薦する

初心者向けウェブサイト構築ガイド⑦:美しいウェブサイトを作るのはとっても簡単

私はかつて、ウェブサイトを一度も構築したことのない人々が、初心者向けのウェブサイト構築方法に関する私...

異なるドメイン名への PC または携帯電話のアクセスを区別するように Nginx を構成する方法

新しい公式サイトはオンラインですが、携帯電話で新しい公式サイトにアクセスすると、エクスペリエンスが非...

Sublime / vscode による HTML コード生成の迅速な実装

目次基本的なHTML構造div とクラス名のショートカット キーを生成するクラス名を持つdiv ID...

VUE レンダリング機能の使い方と詳細な説明

目次序文レンダリングの役割レンダリング機能の説明レンダリングとテンプレートの違いレンダリング例要約す...

Vue3.0 手書き拡大鏡効果

達成される効果は、固定ズームが 2 倍になり、マウスが左側の画像領域に入るとマスク レイヤーが表示さ...

Dockerでmongodbデータベースを使用するための実装コード

mongoイメージを取得する sudo docker pull mongo mongodbサービスを...

モバイル端末の水平および垂直画面ビューポート検出を決定するための js のいくつかの方法

目次1. 異なるビューポートを取得する方法2. 水平画面と垂直画面のJavaScript検出3. 水...

Dockerでのpython3.8イメージのインストールについて

Docker Hub公式サイト1. Pythonミラーを検索するdocker 検索 python 2...

Ubuntuで余分なカーネルを削除する方法

ステップ1: 現在のカーネルを表示する 読み取る $ uname -a Linux rew 4.15...

Mysqlはストアドプロシージャを通じて文字列を配列に分割します

文字列を配列に分割するには、次の 3 つの MySQL 関数を使用する必要があります。 REVERS...

Vueプロジェクトでページジャンプを実装する方法

目次1. vue-cli デフォルト プロジェクトを作成する (babel のみを含む) 2. 作成...

JS ネイティブ 2048 ゲーム ソース コード共有 (インターネットの最新情報)

最近、アルゴリズムについて学んでいて、アルゴリズムで動く小さなゲームに出会いました。そのコードは次の...

WeChat公式アカウントでReactプロジェクトを実行する方法

目次1. a タグを使用して PDF をプレビューまたはダウンロードします。書き方は、携帯電話でクリ...

WeChat アプレット uniapp は左スワイプによる削除効果を実現します (完全なコード)

WeChatアプレットuniappは左スワイプで削除効果を実現成果を達成する1. スワイプしてリス...

Linux に JDK1.8 をインストールするための詳細なチュートリアル

1. 設置前の清掃 rpm -qa | grep jdk rpm -qa | grep gcj yu...