建站技术网专注分享网站建设技术,网站建设教程,真正帮你学会做网站技术,轻松解决网站建设过程中遇到的常见问题,为广大站长服务。 网站地图 | 收藏本站 | 订阅
域名投资,就来找米网,认准网址:www.zhaomi.cc 专业仿站,就到仿站网:www.fangzhan.org
  站内公告: ·帝国cms教程内容已更新,欢迎关注     ·建站技术网采用阿里云服务器,备案已通    
您当前的位置:建站技术网 > 服务器教程 > linux教程

Nginx出现500 Internal Server Error 错误的解决方案

时间:2019-03-02 11:01:27  来源:网络收集  整理: 建站技术网 www.jzjsw.com     点击:1次

  Nginx出现500 Internal Server Error 错误的解决方案

  6500(服务器内部错误) 服务器遇到错误,无法完成请求。

  501(尚未实施) 服务器不具备完成请求的功能。例如,当服务器无法识别请求方法时,服务器可能会返回此代码。

  502(错误网关) 服务器作为网关或代理,从上游服务器收到了无效的响应。

  503(服务不可用) 目前无法使用服务器(由于超载或进行停机维护)。通常,这只是一种暂时的状态。

  504(网关超时) 服务器作为网关或代理,未及时从上游服务器接收请求。

  505(HTTP 版本不受支持) 服务器不支持请求中所使用的 HTTP 协议版本。

  Nginx 500错误(Internal Server Error 内部服务器错误):500错误指的是服务器内部错误,也就是服务器遇到意外情况,而无法履行请求。

  在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据测试结果,Nginx 0.6.31 + PHP 5.2.6 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。

  但很多人用 Nginx 的时候都会出现 500 错误,根据我使用的情况来看,有以下几种情况。

  1、是否磁盘空间不足?

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

  2、nginx配置文件错误?

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

  3、如果上面的问题都不存在可能是模拟的并发数太多了,需要调整一下nginx.conf的并发设置数

  4、还有就是Linux索引节点(inode)用满导致故障的,df -i

inode是什么?

  理解inode,要从文件储存说起。

  文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

  操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。
这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

  文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。
这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

  最近网站编辑反应上传图片失败,网站页面也经常500错误

  


  常规500错误查找http://www.cnblogs.com/hiit/p/8568480.html找了一圈发现配置没问题。

  查看了nginx error错误日志发现磁盘空间满了

  


  用df -h命令查看了一下磁盘使用情况,发现空间还有剩余。

  


  发现问题:后来用df -i查看了一下索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。

  


  解决方法:删除无用的临时文件,释放inode。

  可以查看 /tmp 目录下有很多临时文件。

  也可以选择/var/spool/目录

  输入一下命令查看/var/spool/下的文件个数

  1for i in /var/spool/; do echo $i; find $i |wc -l|sort -nr; done

  


  看到有200多万文件

  cd /var/spool/clientmqueue/ 进入这个目录,删掉这些没用的文件,查看一下,60万文件吧,文件太多,

  于是就用到了这个命令:

  1

  1ls | xargs rm -rf

  2或者这个命令

  1find . -name "*" | xargs rm -rf

  可以分批的处理删除文件,如下图是删除后的效果:inode使用21%。好了

  


  就是因为垃圾文件长时间没清理,导致清理文件花太多的时间,为了避免该类问题,最好对系统的垃圾文件进行定时清理,或者部署监视系统。

  可以根据较大目录的文件占用情况,临时转移部分文件到占用磁盘较小的目录中。

  inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。 而服务器的Block虽然还有剩余,但inode已经用满,因此在创建新目录或文件时,系统提示磁盘空间不足。

  一般分析思路:

  (1)查看nginx error log ,查看php error log

  nginx 错误日志 error.log 默认位置:/usr/local/nginx/logs

  (2)如果是too many open files,修改nginx的worker_rlimit_nofile参数,使用ulimit查看系统打开文件限制,修改/etc/security/limits.conf

  (3)如果是脚本的问题,则需要修复脚本错误,并优化代码

  (4)各种优化都做好,还是出现too many open files,那就要考虑做负载均衡,把流量分散到不同服务器上去了。

解决方法是:

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

  如果按上述方法仍然解决不了问题,就可能是配置或是程序有错误了。

  1 查看nginx的错误日志,找到可能的原因。

  如果提示某些儿PHP扩展没有安装,则去php.ini中打开对应该的扩展或是安装对应该的扩展,重启nginx和php-fpm,再次刷新页面。

  2 如果数据库连接有问题,也可能会出现500错误,不过日志中一定会体现的

  在日志中提示相应的数据库连接有问题了,就要去查看数据库连接是否正确。根据日志,修改对应该的文件,数据库问题解决后,页面即恢复正常。

标签:
文章标题:Nginx出现500 Internal Server Error 错误的解决方案
文章网址:http://www.jzjsw.com/fuwuqiJiaocheng/linux/8677.html
上一篇:linux上如何删除文件名乱码的文件
下一篇:返回列表
来顶一下
返回首页
返回首页
相关文章
推荐资讯
如何通过SEO优化排名赚钱?SEO赚钱方法
如何通过SEO优化排名赚
seo优化教程:网站seo内容优化
seo优化教程:网站seo
SEO细节:企业SEO如何快速为新站做出效果
SEO细节:企业SEO如何
电商技术将如何发展?2018年有这五个大胆预测
电商技术将如何发展?
最新文章
栏目更新
栏目热门