docker上に構築したnginx + laravelで作成したプロジェクトで500番エラーが発生した時のデバッグ方法について。
状況
- 500番エラーが発生。
- docker上ではサーバーが起動している。
- consoleにはエラー表示なし。
対処法
nginxのエラーログを確認する。
1. エラーログの場所を確認する
ログの設定は/etc/nginx/nginx.conf
に記述がある。
cat /etc/nginx/nginx.conf
▼nginx.confの例
例えば以下の場合はerror_log
は/var/log/nginx/
ディレクトリ配下にあることがわかる。
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
server_names_hash_bucket_size 128;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
2. dockerコンテナの中に入る
docker exec -it コンテナ名 bash
3. ファイルの確認
[root@xyz228594eb /]# ls /var/log/nginx/
access.log error.log pj-name.access.log pj-name.error.log
末尾がerror.log
のファイルが存在する。ここにエラーログが入っている。
4. ファイルの中身を確認
[root@xyzb228594eb /]# cat /var/log/nginx/pj-name.error.log
以上。
エラーの例
2021/04/20 09:39:02 [error] 11#0: *29 FastCGI sent in stderr: “PHP message: PHP Parse error: syntax error, unexpected ‘?’ in vendor/laravel/framework/src/Illuminate/Foundation/helpers.php on line 500” while reading response header from upstream, client: 192.168.96.1, server: local.xyz.jp, request: “GET / HTTP/1.1”, upstream: “fastcgi://unix:/var/run/php-fpm/php-fpm.sock:”, host: “local.xyz.jp”
helpers.phpの500行目にsyntax errorとなる?
が記述されている。
times($arguments[2] ?? null);
php7以降で使えるようになった??
(null演算子)が使われているが、使用注のバージョンがphp5だったダメエラーが発生。