nginx 500错误总结

1、nginx 500 概览

500--服务器内部错误:服务器遇到错误,无法完成请求
501--尚未实施:服务器不具备完成请求的功能,如:当服务器无法识别请求方法时,服务器可能会返回此代码
502--网关错误:服务器作为网关或代理,从上游服务器收到了无效的响应
503--服务不可用:服务器目前无法使用,可能由于停机或者超载,通常为暂时的状态
504--网关超时:服务器作为网关或者代理,无法及时从上游服务器接收请求
505--http版本不受支持:服务器不支持请求中所使用的http协议版本

2、服务器500分析

# 500错误一般有这几种情况
1、web脚本错误,如PHP语法错误,lua语法错误
2、访问量大的时候,系统资源限制,不能打开过多文件

# 分析
1、查看nginx error log、php error log
2、如果报错信息为too many open files,修改nginx的worker_rlimit_nofile参数,使用ulimit查看系统打开文件限制,修改/etc/security/limits.conf
3、若为脚本问题,修复脚本错误,优化代码
4、若优化做好,仍出现too many open file,考虑负载均衡

# 错误总结
1、硬盘空间满了
使用 df -k 查看硬盘空间是否满了。清理硬盘空间就可以解决500错误。nginx如果开启了access log,在不需要的情况下,最好关闭access log。access log会占用大量硬盘空间

2、nginx配置文件错误
这里不是指语法错误,nginx如果配置文件有语法错误,启动的时候就会提示。当配置rewrite的时候,有些规则处理不当会出现500错误,请仔细检查自己的rewrite规则。如果配置文件里有些变量设置不当,也会出现500错误,比如引用了一个没有值的变量

3、如果上面的问题都不存在可能是模拟的并发数太多了,需要调整一下nginx.conf的并发设置数 
解决方法是: 
1 打开/etc/security/limits.conf文件,加上两句

复制代码代码如下:
* soft nofile 65535 
* hard nofile 65535 

2 打开/etc/nginx/nginx.conf 
在worker_processes的下面增加一行 

复制代码代码如下:
worker_rlimit_nofile 65535;

3 重新启动nginx,重新载入设置 

复制代码代码如下:
kill -9 `ps -ef | grep php | grep -v grep | awk '{print $2}'` 
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 100 -u www-data -f /usr/bin/php-cgi 
killall -HUP nginx 
重启后再看nginx的错误日志,也没有发现500报错的情况了。 

4、有可能是数据库问题我的在nginx日志php日志都没有发现什么问题, 最后发现数据库访问不了,修正后问题解决。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐