当前位置 主页 > 服务器问题 > Linux/apache问题 >

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

    栏目:Linux/apache问题 时间:2019-11-30 19:03

    今日在使用 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