1
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

nginxで50xエラーを発生させてerror_pageの検証

Posted at

概要

nginxのデフォルトのエラーページを返さないようにカスタムエラーページを設定する。
リバースプロキシとして使用する際、httpディレクティブとserverディレクティブのerror_pageの書き方によってどのようにエラーページを返すか、実際に50xエラーを発生させて確認したので内容のまとめ

インフラの準備

  • EC2でnginxを2台準備
  • 1台はリバースプロキシとして使用
  • 1台は転送先として使用
  • 転送先にはphp-fpmを入れてFastCGIが利用できる様にしておく
    ※phpで意図的に50xを発生させるために必要

nginxの設定

リバースプロキシ

proxy.conf
upstream origin {
  server 1.2.3.4:80;

}
server {
  proxy_read_timeout 5;
  proxy_connect_timeout 5;
  proxy_send_timeout 5;
  listen 8080;
  server_name  localhost;
  location / {
    proxy_pass http://origin;
  }
}

50xのエラーコードを発生させる準備

リバースプロキシでエラーを発生させる

スクリーンショット 2022-10-19 16.04.52.png

  • 502エラー
    転送先のnginxを停止させた状態でリバースプロキシから転送先にリダイレクトすると502エラーが発生する

  • 504エラー
    転送先に下記の様に10秒待機後、Hello Worldが表示されるphpを置いてここにアクセスする
    nginxのタイムアウト設定を5秒にしているのでタイムアウトして504エラーが発生する

/usr/share/nginx/html/phptest.php
<?php 
sleep(10); die( 'Hello World' ); 
?>

転送先でエラーを発生させる

スクリーンショット 2022-10-19 16.05.56.png

  • 50xエラー
    下記の様に該当のエラーコードを返すphpをエラーコードの分だけ作成する
    ここにアクセスすると該当のエラーが発生する
/usr/share/nginx/html/500.php
<?php
header("Status: 500 Internal Server Error");
?>

error_pageの書き方

スクリーンショット 2022-10-19 16.34.07.png

httpディレクティブで全体の設定を入れてリバースプロキシ毎のserverディレクティブで個別の設定を入れてみる
custome-error.htmlが用意したカスタムエラーページです

検証結果

スクリーンショット 2022-10-19 16.41.42.png

  • serverディレクティブに書いたerror_pageで返す
  • 転送先でエラーが発生した場合、serverディレクティブでエラーコードが定義されていればそれを返す
  • 定義されていない場合は転送先のエラーを返す
  • serverディレクティブ内のerror_pageを削除すると転送先のcustome-error.htmlを見ようとして404になった
1
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?