Nginx 500错误总结

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

Nginx 500错误(Internal Server Error 内部服务器错误):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 files,那就要考虑做负载均衡,把流量分散到不同服务器上去了。

错误原因总结:

  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日志都没有发现什么问题, 最后发现数据库访问不了,修正后问题解决。

502 Bad Gateway原因分析

502 Bad Gateway: 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

原因分析
将请求提交给网关如php-fpm执行,但是由于某些原因没有执行完毕导致php-fpm进程终止执行。说到此,这个问题就很明了了,与网关服务如php-fpm的配置有关了。
分析思路:
php-fpm.conf配置文件中有两个参数就需要你考虑到,分别是max_children和request_terminate_timeout。

  1. max_children最大子进程数,在高并发请求下,达到php-fpm最大响应数,后续的请求就会出现502错误的。可以通过netstat命令来查看当前连接数。
  2. request_terminate_timeout设置单个请求的超时终止时间。还应该注意到php.ini中的max_execution_time参数。当请求终止时,也会出现502错误的。
  3. 当积累了大量的php请求,你重启php-fpm释放资源,但一两分钟不到,502又再次呈现,这是什么原因导致的呢? 这时还应该考虑到数据库,查看下数据库进程是否有大量的locked进程,数据库死锁导致超时,前端终止了继续请求,但是SQL语句还在等待释放锁,这时就要重启数据库服务了或kill掉死锁SQL进程了。

504 Gateway Time-out原因分析

504错误一般是与nginx.conf配置有关了。主要与以下几个参数有关:fastcgi_connect_timeout、fastcgi_send_timeout、fastcgi_read_timeout、fastcgi_buffer_size、fastcgi_buffers、fastcgi_busy_buffers_size、fastcgi_temp_file_write_size、fastcgi_intercept_errors。特别是前三个超时时间。如果fastcgi缓冲区太小会导致fastcgi进程被挂起从而演变为504错误。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值