背景 nginx サーバー モジュールは 2 つのサーバーにプロキシする必要があるため、異なるサーバーを区別して転送するために異なる場所のパスが使用されます。 冒頭にこう書かれていた 位置 / { proxy_pass http://server1/; } 場所 / インデックス { proxy_pass http://server2/; } しかし、server1 にサービス パス /indexNew があることを忘れていたため、server1 にプロキシされ、404 の問題が発生しました。そこで、緊急に構成を次のように変更しました。 場所 /indexNew { proxy_pass http://server1/; } 位置 / { proxy_pass http://server1/; } 場所 / インデックス { proxy_pass http://server2/; } 問題現象 その結果、リクエストは server1 に到達しますが、エラー メッセージは POST がサポートされていないというものです。 { 「ステータス」: 500, "メッセージ": "http://172.28.72.117/-リクエストメソッド 'POST' はサポートされていません", "結果": {} } これは、当時アプリケーションから返されたエラーです。nginx をチェックしましたが、エラーはありませんでした。非常に奇妙でした。コードを見ると、/indexNew は確かに POST メソッドであるのに、なぜサポートされていないというエラーが報告されたのでしょうか。 まず、nginx のさまざまな場所の書き込み方法の一致する順序は次のとおりです。 分析する nginxログにエラーがないので、nginxからアプリケーションへのパケットをキャプチャしてみてください。 tcpdump コマンドを使用してパケットをキャプチャする tcpdump -w dataAll_normal.pcap -i eth0 -s0 ポート8888 上記のコマンドと同様にパケットをキャプチャし、Wireshark 経由で、/indexNew に関連する http トラフィック パケットがまったく見つからないことがわかります。 次のように場所を変更してみてください 場所 /indexNew { proxy_pass http://server1; } 位置 / { proxy_pass http://server1/; } 場所 / インデックス { proxy_pass http://server2/; } 唯一の違いは、/indexNewのproxy_passの最後のスラッシュ/が削除されていることです。パケットをキャプチャし続けると、/indexNewパケットが検索できることがわかります。 これは変更が正しいことを示します。 エラーを元に戻し、パッケージをキャプチャしようとしますが、/indexNew パッケージを検索できない場合は、IDE を介してアプリケーションをリモート デバッグします。 アプリケーションの URL に /indexNew がなかったため、当然 Wireshark パッケージでも見つけることができませんでした。 。 。 これは、nginx がアプリケーションを転送する場合、アクセス パスが/のみになるためです。 プロジェクト内のリクエストパス/とのインターフェースは、実際にはGETメソッドです location の proxy_pass の構文を詳しく見てみましょう。確かに次のようになります。proxy_pass の末尾に / があり、一致する場所のパスが削除され、後続の URL PATH が転送用にインターセプトされます。 したがって、proxy_pass の最後の / の意味に注意して慎重に使用する必要があります。これは、100% の情報転送ではなく、パス要求情報を変更します。 Nginx proxy_pass の / スラッシュが原因の悲惨な事件に関するこの記事はこれで終わりです。Nginx proxy_pass スラッシュに関するその他の関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: フロントエンド開発者は毎日HTMLタグの理解を学ばなければならない(1)
方法1: SET PASSWORDコマンドを使用する MySQL -u ルート mysql> ...
<br />jb51.net では、常に記事のセマンティクスを重視してきましたが、HTM...
Docker コンテナに繰り返し入って操作することを避けるために、コンテナ内の一連の命令をホストマシ...
目次1. 解体のヒント2. デジタルセパレーター3. try...catch...finally が...
序文今日、自作のコンポーネントを使っていたところ、突然、長い間忘れていたバブリングイベントに遭遇しま...
1. CSSを使用するコードをコピーコードは次のとおりです。スタイル="display:n...
数字、文字、またはランダムな色の数字と文字の混合で構成される n 桁の確認コード。以下に完全なコード...
この記事の例では、WeChatアプレットの日付と時刻コンポーネントの具体的なコードを参考までに共有し...
MySQL データベースは、特に JAVA プログラマーの間で広く使用されています。クラウド データ...
nginx をリバース プロキシとして使用する場合、リクエストをそのまま次のサービスに転送するだけで...
この記事では、ドラッグ可能なプログレスバーを実装するためのJavaScriptの具体的なコードを参考...
この記事では、Element-uiを使用してvue.jsでナビゲーションメニューを実装するための具体...
Tomcat は Java 言語をベースにした Web サーバー ソフトウェアです。この記事では主に...
序文コードを書く過程で、必然的にコードに何らかの変更を加えることになります。しかし、変更を加えるとき...
show processlist コマンドは非常に便利です。MySQL の実行が 50% 以上になる...