HTTP サーバーから Web アプリケーションのエラー メッセージを提供する

HTTP サーバーから Web アプリケーションのエラー メッセージを提供する

私は、バックエンドとして Tomcat を備えた HTTP サーバーとして nginx を使用しています (proxy_pass を使用)。これはうまく動作しますが、独自のエラー ページ (404、500 など) を定義し、それらが Tomcat ではなく nginx によって提供されるようにしたいと考えています。たとえば、次のリソースがあります。

https://domain.com/resource

存在しません。その URL を [GET] すると、nginx ではなく Tomcat から Not Found メッセージが表示されます。

私が望むのは、Tomcat が 404 (またはその他のエラー メッセージ) で応答するたびに、nginx がユーザーにメッセージ (nginx がアクセス可能な HTML ファイル) を送信することです。

nginx サーバーの設定方法は非常に簡単です。

location / {
    proxy_pass   http://localhost:8080/<webapp-name>/;
}

また、ポート 8080 (Tomcat) をこのマシンの外部からアクセスできないように構成しました。

locationURL に依存するリソースがいくつかあるため、nginx 構成で異なるディレクティブを使用しても機能しないと思います。

https://domain.com/customer/<non-existent-customer-name>/[GET]

常に 404 (またはその他のエラー メッセージ) を返します。

https://domain.com/customer/<existent-customer>/[GET]

404 (顧客が存在) 以外のものを返します。

Tomcat (アプリケーション サーバー) のエラー メッセージを Nginx (http サーバー) で提供する方法はありますか? ディレクティブによって送信されたメッセージをチェックしproxy_pass、それに応じて操作するにはどうすればよいでしょうか?

答え1

わかりました。見つかりました。server私が使用している nginx サイト構成のセクション:

error_page 404 /404.html;
location = /404.html {
    root /var/www/nginx;
}

location / {
    proxy_pass http://localhost:8080/api/;
    proxy_intercept_errors on;
}

proxy_intercept_errors onnginxに以下を追加する必要があります彼らを阻止する. Nginx は で定義したエラーのみをインターセプトしますerror_page

関連情報