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

推薦する

時間範囲効果を実現するためのJavaScript

この記事では、時間範囲効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します...

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

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

ダッシュボードを実装するためのjQueryプラグイン

jQueryプラグインは、参考のためにダッシュボードを実装します。具体的な内容は次のとおりです。一般...

Ubuntu 20.04の新バージョンでルートユーザーを使用してシステムにログインする方法の詳細なチュートリアル

Ubuntu 20.04 では、デフォルトで root ログインが有効になっていないため、デスクトッ...

実行中の時計を実装するための純粋な CSS3 コード

操作効果コードの実装html <div id="ウォッチ"> <...

JavaScriptはオブジェクトの不要なプロパティを削除します

目次例方法1: 削除方法2: 分解補充する要約するThinking シリーズは、10 分で実用的なプ...

JS 9 Promise 面接の質問

目次1. 複数の .catch 2. 複数の .catch 3. .then と .catch の連...

Vueのカスタムディレクティブの詳細なガイド

目次1. カスタム指示とは何ですか? 2. 指示をカスタマイズする方法フック機能3. 応用シナリオ入...

ホストNginx + Docker WordPress Mysqlを設定するための詳細な手順

環境Linux 3.10.0-693.el7.x86_64 Docker バージョン 18.09.0...

js ドラッグ アンド ドロップ テーブルでコンテンツ計算を実現する

この記事の例では、コンテンツの計算を実現するためのjsドラッグアンドドロップテーブルの具体的なコード...

Windows オペレーティング システムでポートの使用状況を照会およびクリアするプログラム

Windowsオペレーティングシステムでは、ポートの占有状況を照会し、ポートの占有状況をクリアするプ...

デザイン理論:計画、リソース、コミュニケーションの問題について

<br />多くの中小企業ではこの問題は発生しません。中小企業はデザイナーをサポートし、...

ページを更新せずにフォームを送信するには iframe を使用します

そこで、この問題を解決するために埋め込みフレームワークを導入します。具体的な原則は、フォームがデータ...

mysql binlog ログを正しくクリーンアップする 2 つの方法

mysqlはbinlogログを正しくクリーンアップします序文: MySQL の binlog はデー...