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 での大規模トランザクションによって発生する挿入の遅延ケースの分析

推薦する

MySQL 8.0 オンライン DDL クイック列追加の概要

目次問題の説明MySQLオンラインDDLで列を追加する従来の方法01 コピー方法02 インプレースメ...

CSS3 で虫眼鏡効果を模倣するいくつかの方法の原理の分析

記事のタイトルが「模造虫眼鏡」なのはなぜですか?今日お話ししたいのは、一般的に言われているような、マ...

MySQL のマスター スレーブ レプリケーション オプションをオンラインで変更する方法

序文: MySQL で最も一般的に使用されるアーキテクチャは、マスター スレーブ レプリケーションで...

単一/複数行テキストを含む div を垂直方向に中央揃えする N 通りの方法 (高さ不明/高さ固定)

この問題について話すとき、垂直方向の中央揃えを設定するための vertical-align 属性が ...

HTML要素にフォーカスを設定する方法

コードをコピーコードは次のとおりです。 <本文<フォームアクション="&quo...

IE6 スペースバグ修正方法

コードを見てみましょう:コードをコピーコードは次のとおりです。 < !DOCTYPE html...

Linux での chmod コマンドの使用方法の詳細な説明

chmod コマンド構文chmod コマンドを使用する場合の正しい構文は次のとおりです。 chmod...

CentOS に Docker をインストールし、Springboot で Docker をリモート公開する方法

目次1. CentOS7.0へのJDK1.8のインストール2. Dockerのインストール3.Doc...

忘れられたボタンタグ

注:この記事は他の人によって翻訳されていますが、考えるべき点が多く、理解しにくい点もあると感じていま...

Vue フロントエンドと Django バックエンドを使用して、一定期間内のデータをクエリする方法

序文開発プロセスでは、すべてのデータではなく特定の期間内のデータをクエリするなど、クエリのフィルタリ...

Reactイベントバインディングの詳細な説明

1. 何ですかreactアプリケーションでは、イベント名はキャメルケース形式で記述されます。たとえ...

MySQLクエリデータを時間別に表示します。データがない場合は0を入力してください。

需要背景統計インターフェースでは、フロントエンドは 2 つの配列を返す必要があります。1 つは 0 ...

Nginx で複数のドメイン名がドメインをまたいでアクセスできるようにマップを使用する方法

一般的なNginx構成ではクロスドメインが可能 サーバー{ 11111 を聞いてください。 serv...

Node.js管理ツールnvmの詳細なインストール手順

いいえnvmはnodejsの複数のバージョンを管理する役割を担っています。インストール: https...

CSS子要素選択親要素の実装

通常、CSS セレクターは上から下に選択し、親要素を介して子要素を選択します。では、子要素を介して親...