当前位置:首页 >> 服务器

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

今日在使用 Nginx 的时候出现 500 错误,就搜索了一下错误代码,分享给大家。

500(服务器内部错误)    服务器遇到错误,无法完成请求。
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)爆满引发500问题https://www.jb51.net/article/175430.htm

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错误,不过日志中一定会体现的

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。