500
Internal Server Error服务内部错误:服务器遇到异常情况,无法提供服务。
场景:
- PHP语法错误。
- nginx内部异常,如打开文件过多。
排查:
通过nginx、php(包括fpm)错误日志排查,这类错误多为语法错误,故一般错误日志都会记录。
复现:
- 设置php.ini不显示fpm错误信息。
检查php.ini内display_errors是否开启,若是开启状态,不会显示500错误,而会把错误信息输出到浏览器。
php文件:
<?php
function hello() {
echo 'hello';
}
hello1();
nginx日志:
==> /opt/openresty/nginx/logs/test.com.error.log <==
2020/02/03 16:02:12 [error] 28927#0: *45 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Call to undefined function hello1() in /var/www/test.com/test.php:7
Stack trace:
#0 {main}
thrown in /var/www/test.com/test.php on line 7" while reading response header from upstream, client: 127.0.0.1, server: test.com, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "test.com"
页面:
501
Not Implemented 不被支持的请求:服务器不支持该种请求方式,服务器必须支持的方法只有GET和HEAD。
场景:配置及
服务器无法识别时出现
排查:
未复现
复现:
未复现
502
Bad Gateway 网关错误:表示作为网关或代理服务器,从上游服务器(fpm)接收到的响应是无效的。
场景:
fpm异常响应,如脚本执行时间过长,超过了fpm允许执行的时间,脚本尚未执行完成就被fpm杀掉。
或者fpm没有启动。都可能导致502。
总的来说是因为,请求到达fpm但是fpm没有给出正确的响应。
排查:
通过nginx或fpm日志。
复现:
- 设置fpm最大执行时间
request_terminate_timeout: 5
php文件:
<?php
function hello() {
echo 'hello';
}
sleep(10);
hello();
响应:
503
Service Unavailable 服务不可用:表示服务器尚未处于接受请求的状态。
场景:
服务器无法使用(由于超载或停机维护)。通常这只是暂时的状态。
排查:
未复现
复现:
未复现
504
Gateway Timeout 网关超时:表示作为网关或者代理服务器的服务器,无法在规定时间获取到响应。
场景:
nginx把请求转发给fpm后,未在nginx规定的时间内得到返回。
排查:
nginx日志:
2020/02/04 15:25:06 [error] 10584#0: *30 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 127.0.0.1, server: test.com, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "test.com"
复现:
fpm配置:
# php脚本最大执行时间
request_terminate_timeout: 10;
nginx配置:
# fastcgi返回数据最大时长
fastcgi_read_timeout 5;
php代码:
<?php
function hello() {
echo 'hello';
}
sleep(7);
hello();
页面:
499
场景:
客户端在没有得到请求返回的情况下,主动断开连接会报一个499的错误。
排查:
nginx 日志:
127.0.0.1 - - [04/Feb/2020:15:46:25 +0800] "GET /test.php HTTP/1.1" 499 0 "-" "curl/7.64.0" "-"
复现:
nginx配置:
# fastcgi返回数据最大时长
fastcgi_read_timeout 5;
使用curl:
# curl -m 5 -IX GET http://test.com/test.php
curl: (28) Operation timed out after 5001 milliseconds with 0 bytes received