Nginx proxy_pass の / スラッシュによって引き起こされた殺人事件の詳細な説明

Nginx proxy_pass の / スラッシュによって引き起こされた殺人事件の詳細な説明

背景

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 をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • nginx がドメイン名アクセス用に設定されている場合にドメイン名の後に 2 つのスラッシュ // が表示される問題の解決方法
  • nginx URL にスラッシュと 301 リダイレクトが自動的に追加される問題
  • Nginx サーバーで WordPress パスにスラッシュが自動的に追加されない問題を解決する方法
  • Nginx のバックスラッシュ自動デコード問題の解決方法
  • nginxのスラッシュ(/)の詳しい説明

<<:  フロントエンド開発者は毎日HTMLタグの理解を学ばなければならない(1)

>>:  JSが絵柄デジタル時計を実現

推薦する

centos7.2 オフラインインストール mysql5.7.18.tar.gz

ネットワークが分離されているため、MySQL は yum を使用してインストールできません。ここでは...

HTML のフォームフォームのメソッド属性の紹介

1 メソッドは、データをサーバーに送信する方法を指定するプロパティです。 2 post と get ...

モバイル開発チュートリアル: ピクセル表示の問題の概要

序文モバイル端末の開発の過程で、モバイル端末のディスプレイはデスクトップ端末のディスプレイとは一般的...

ハイパーリンクを表示して開く方法

<br />インターネット上の無数の情報は基本的に HTML ドキュメントで構成されてお...

MySQLテクノロジーにおけるInnoDBロックの詳細な説明

目次序文1. ロックとは何ですか? 2. InnoDBストレージエンジンのロック2.1 ロックの種類...

MySQL スロークエリログの設定と使用方法のチュートリアル

序文MySQL スロー クエリ ログは、日常業務でよく遭遇する機能です。MySQL スロー クエリ ...

XML構文の詳細な説明

1. 文書化ルール1. 大文字と小文字が区別されます。 2. 属性値は引用符(一重引用符または二重引...

CentOS 7.5 が Varnish キャッシュサーバー機能を導入

1. ワニスの紹介Varnish は、高性能なオープンソースのリバースプロキシサーバーおよび HTT...

Docker5フル機能の港湾倉庫構築プロセス

Harbor は、Docker イメージを保存および配布するためのエンタープライズ レベルのレジスト...

Zabbixで電子メールアラートを実装する方法

オンラインチュートリアルに従って実装しました。 zabbix3.4、スクリプトとsendEmailを...

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

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

LinuxベースのApacheウェブサイトサービス構成の詳細な説明

オープンソース ソフトウェアである Apache は、最も広く使用されている Web アプリケーショ...

MySQL 8.0.12 クイックインストールチュートリアル

MySQL 8.0.12 のインストールには 2 日かかり、さまざまな問題が発生しました。以下にまと...

Vueは買い物数量を変更できるショッピングカートを実装します

この記事では、Vueを使用してショッピングカートの数量を変更する方法を紹介します。具体的な内容は次の...

JavaScript 状態コンテナ Redux の詳細な説明

目次1. Reduxを選ぶ理由2. Reduxデータフロー3つの原則4. Reduxソースコード分析...