【Azure】AppSerivce on Linux上のPHPアプリで500エラーが404エラーになる現象と解決策

AzureのAppService on Linux上でPHPアプリの開発を行なっていた際に、PHPアプリ側で500エラーが起こると、404エラーになる現象に遭遇したので、その解決策を紹介します。

  1. 現象について
  2. 原因
  3. 解決策
  4. まとめ

1.  現象について

AppService on Linux上にPHPアプリをデプロイした際に、500系のエラーが起こると全て404エラーにリダイレクトされるという現象が起きました。

500系のエラーはローカルでは、500系のエラーとして処理されていましたが、AppService on Linux上だけでこの現象は確認できました。

2. 原因

ログを確認したところ、PHPアプリ上では、500系のエラーとして処理されていたので、AppService on LinuxのWebサーバであるNginxの設定を確認してみます。

/etc/nginx/nginx.conf

/etc/nginx/sites-enabled/*の設定を読み込んでいるようだったので、確認してみます。

/etc/nginx/sites-enabled/default

設定を確認すると、500系のエラーは/html/50x.htmlにリダイレクトされるように設定されていました。

しかし、リダイレクト先の/html/50x.htmlは存在せず、404エラーになっているようでした。

この設定ファイルを修正すれば解決しそうです。

3. 解決策

解決策としては、Nginxの設定で

  • 500系のエラーが出た際のリダイレクト先に該当のHTMLを配置するか
  • リダイレクト先を変更するか

になります。

今回は、こちらで作成した永続化されたプロジェクト内のHTMLにリダイレクトさせたいので、「リダイレクト先を変更する」で解決します。

ただ、AppServiceの特性上、デプロイなどで再起動すると、Nginxなどの設定が初期値に戻ってしまい、その都度設定しなおさないといけなくなります。

そこで、AppServiceのスタートアップコマンドを設定できる機能でNginxの設定を変更するようにし、対応します。

3-1. PHPアプリのプロジェクトにNginxの設定ファイルと50x.htmlを用意する

まずは500系エラーが発生した際の50x.htmlを用意し、PHPアプリのプロジェクト配下に配置してください。

そして、AppService上の/etc/nginx/sites-enabled/defaultをコピーし、プロジェクト配下にdefaultファイルを作成し貼り付け、リダイレクト先がPHPアプリ配下にあるHTMLになるように修正してください。

default

3-2. スタートアップコマンドでシンボリックリンクを設定する

AzureのAppServiceのポータルのスタートアップコマンドに、プロジェクト配下にあるNginxの設定ファイル「default」を参照するシンボリックリンクを作成するコマンドを入力します。

これで再起動しても、500系のエラーが発生した際に404エラーにならずに指定したHTMLにリダイレクトされるようになります。

4. まとめ

なぜデフォルトの設定で500系のエラーのリダイレクト先にHTMLがないのかはわかりませんが、現状(2021/09/21時点)この方法で対応可能です。

少しでも参考になればと思います。



❏❏ TOPIC ❏❏ ------------------------------------------------------------

カスタム自由!フリーECサイトパッケージ
チャットボット導入サービス
WEBシステム開発・スマホアプリ開発はSRIAへ