nginx がアップストリーム アドレスにジャンプしない問題の解決方法

nginx がアップストリーム アドレスにジャンプしない問題の解決方法

序文

今日、nginx で非常に奇妙な問題に遭遇しました。フロントエンドの tomcat がページにジャンプすると、アップストリーム アドレスにジャンプして直接 404 を報告しましたが、一部のページ アクセスは正常でした。

http://tomcat/tomcat-web/account/index

イントラネットIPを直接使用してアクセスが正常に行われる場合は、nginxに問題があると判断できます。nginxの設定は次のとおりです。

アップストリームTomcat { 
  サーバー 192.168.11.172:8061; 
  サーバー 192.168.11.172:8062;
  ip_ハッシュ;  
}  
 
 サーバー{ 
  8060を聴く;  
  サーバー名 www.example.com;

  位置 / { 
    proxy_pass http://tomcat; 
    proxy_set_header ホスト $host:8060;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    インデックス index.html index.htm; 
  } 
 }

調査の結果、バックエンドの Java コードでこのアドレスがリダイレクトされ、request.getServerPort() が使用されていたことが判明しました。nginx 経由でリダイレクトされた場合、正しいフロントエンド ポートを取得できず、デフォルトの戻り値は 80 のままでした。nginx のデフォルトのリスニング ポートが 80 でない場合、response.sendRedirect は正しいアドレスにジャンプできません。

response.sendRedirect(getBasePath(request) + "account/index");
  プライベート文字列 getBasePath(HttpServletRequest リクエスト) {
    文字列パス = request.getContextPath();
    文字列 basePath = request.getScheme() + "://" + request.getServerName()
        + ":" + request.getServerPort() + パス + "/";
    basePath を返します。
  }

解決策は、nginx設定ファイルproxy_set_headerにポート番号を追加することです。

proxy_set_header ホスト $host:$proxy_port;

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • NGINX が https から http にジャンプするためのソリューションの詳細な説明
  • nginx rewriteを使用してURLをリダイレクトする方法
  • Nginx サーバーで HTTP 301 を www 付きのドメイン名にリダイレクトする方法
  • nginx に https アクセスを強制する方法 (http が https にジャンプします)
  • さまざまなブラウザ言語に応じて Nginx ページリダイレクトを設定する方法
  • ホームページジャンプの問題を解決するnginxの詳しい説明
  • nginx 301 リダイレクトを www 付きドメイン名にリダイレクトする詳細な説明
  • nginx ロードバランシングを介して https にリダイレクトする方法
  • Nginxのmapコマンドを使用してページをリダイレクトする
  • thinkPHP 5をnginxでデプロイするときにホームページにのみリダイレクトされる問題を解決する
  • Nginx を使用して https ルートドメイン名への 301 リダイレクトを実装するためのサンプル コード
  • NginxはIP経由の直接アクセスを禁止し、カスタム500ページにリダイレクトします
  • Nginx 書き換えジャンプの適用シナリオの詳細な説明
  • nginx で HSTS を有効にしてブラウザを HTTPS アクセスにリダイレクトする方法の詳細な説明
  • nginx での書き換えジャンプの実装
  • Nginx におけるロケーション マッチングとリライト リダイレクトの詳細な説明
  • Nginx 隠しリダイレクト (リダイレクト後もブラウザ URL は変更されません)

<<:  Vue 円形パーセンテージ プログレスバー コンポーネントの機能の実装

>>:  MySQL での大規模トランザクションによって発生する挿入の遅延ケースの分析

推薦する

モバイルウェブページのサイズ調整を実装する方法

ようやく手元のプロジェクトが終了し、行方不明だった人たちが戻ってきました!プロジェクトを進める過程で...

nginx+php実行リクエストの動作原理の詳細な説明

PHPの仕組みまず、よく耳にするcgi、php-cgi、fastcgi、php-fpmの関係を理解し...

知らないかもしれないmysqldumpパラメータ

前回の記事で、mysqldump バックアップ ファイルに記録されるタイムスタンプ データは UTC...

vue3 における vuex と pinia の落とし穴

目次導入インストールと使用方法文章の相違点と類似点の簡単な比較VuexとPiniaの長所と短所Pin...

Windows および Linux で tomcat9 を介して war パッケージを手動で展開する方法

Windows 環境と Linux 環境では結果が異なります。ウィンドウズステップ 1: Maven...

Nginx セッション共有問題の解決策の分析

この記事は主に、Nginx セッション共有の問題に対する解決策を紹介します。記事内のサンプル コード...

JavaScriptアップロードファイル制限パラメータケースの詳細な説明

プロジェクトシナリオ: 1. アップロードファイルの制限関数: 1. フロントエンド操作による異常な...

MAC 上の MySQL の初期パスワードを忘れた場合の対処方法

MACでMySQLの初期パスワードを忘れた場合の解決策を参考までに共有します。具体的な内容は次のとお...

Linux 占有ポートの強制解放と Linux ファイアウォールのポート開放方法の詳しい説明

nginx、mysql、tomcat などのサービスをインストールするときに、使用する必要があるポー...

Nginx 仮想ホスト (IP ベース) を構成する 3 つの方法の詳細な説明

Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮想...

CSS3 マウスホバー遷移ズーム効果

以下は、純粋な CSS で記述された画像マウスホバーズーム効果です。実際、基本原理は非常に単純です。...

MySQL エラー コード 1862 の解決方法: パスワードの有効期限が切れています

ブロガーは 1 ~ 2 か月間 MySQL を使用していませんでしたが、今日この問題に遭遇しました。...

入力のsize属性とmaxlength属性の違い

最近、プロジェクトで input size 属性と maxlength 属性を使用しました。以前は、...

TypeScript のクラス

目次1. 概要2. シンプルなクラスを定義する3. 継承4. public、private、prot...

dockerfile における ENTRYPOINT と CMD の組み合わせと違い

前回の記事【dockerコンテナのためのdockerfileを詳しく解説】では、dockerfile...