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

推薦する

React 国際化 react-i18next の詳細な説明

導入react-i18next は、 i18nextをベースにした強力な国際化フレームワークです。 ...

MySQL トランザクション分離レベルの表示と変更の例

トランザクション分離レベルを確認するMySQL では、'%tx_isolation%'...

Dockerカスタムブリッジdocker0とdockerのコマンド操作の開始、終了、再起動

質問会社がサーバーを移行した後、デフォルトで作成された docker0 ブリッジが会社の外部ネットワ...

Vue3.0はドロップダウンメニューのカプセル化を実装します

Vue3.0 がリリースされてからしばらく経ちましたが、勉強を始める必要があります。まず、達成したい...

Web ページは何ピクセルで設計すればよいでしょうか?

多くのウェブデザイナーは、ウェブページのレイアウトを設計する際に、インターフェースウェブページの幅に...

Vueルーティングはページステータスを復元する操作メソッドを返します

ルートパラメータ、ルートナビゲーションガード: ページが戻ったときに検索結果を保持する需要シナリオ:...

MySQL無料インストール版のパスワードの設定と変更に関するチュートリアル

ステップ 1: 環境変数を構成する (解凍パス: G:\mysql\mysql-5.7.21-win...

JavaScript ドキュメント オブジェクト モデル DOM

目次1. JavaScriptはページ内のすべてのHTML要素を変更できる1. IDでHTML要素を...

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

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

postcss-pxtorem モバイル適応の実装

コマンドを実行してプラグインpostcss-pxtoremをインストールします npm インストール...

自動行折り返し機能付き CSS Flex レイアウトのサンプル コード

フレックス コンテナーを作成するには、要素に display: flex プロパティを追加するだけで...

Nginx+ModSecurity セキュリティモジュールの導入

目次1. ダウンロード2. 展開1.Nginxのデプロイメント2. ModSecurityの展開3....

Zabbix を使用して Nginx/Tomcat/MySQL を監視する方法の詳細なチュートリアル

目次ZabbixはNginxを監視するZabbixはTomcatを監視するZabbixはMySQLを...

WeChatミニプログラムでの仮想リストの実装例

目次序文分析する初期レンダリング方法初期最適化さらなる最適化方法2序文ほとんどのミニプログラムには、...