• 1514阅读
  • 0回复

nginx提示:500 Internal Server Error错误的解决方法

楼层直达
现在越来越多的站点开始用 Nginx ,("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。 wT1s;2%  
vqf$("  
在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据测试结果,Nginx 0.6.31 + PHP 5.2.6 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。 Ucj?$=  
vW63j't_  
但很多人用 Nginx 的时候都会出现 500 错误,根据我使用的情况来看,很大一部分原因是 因为文件打开句柄太小有关。 yU$ MB,1  
Ic& h8vSU  
在linux 下 使用这个命令增加进程打开的文件句柄。 En5oi  
ulimit -SHn 51200 *Ak.KBg  
默认只用1000 当链接数小的时候看不出来,使用这种处理方法可以有效防止500错误出现。 jvT'N@  
今天访问网站的时候,偶尔会遇上500 Internal Server Error的错误提示页面. *[Hrbln  
查了相关资料认为是访问过大,系统内核进程受限才出现的. S63 Zk0(25  
!e$gp (4  
答案如下: w =^.ICyb@  
c :R?da  
$ ulimit -n V+d_1] l  
11095 }5o?7} ?  
;*K4{wvG  
程序限制只能打开11095个文件,ulimit命令是设置当前用户一个进程可拥有的文件描述符的数量. Vej$|nF  
看来是模拟的并发数太多了,需要调整一下nginx.conf的并发设置数,(我的配置主机的内存2G,CPU为2.8G,) _z5/&tm_H  
T U%@_vYR  
Fu7:4+  
复制代码 代码如下: :1v,QEb\  
m 2H4V+M+  
"TRS(d|3  
vi /etc/nginx/nginx.conf jW/WG tz  
events { yzK;  
worker_connections 1024; VK}4 <u  
} O"m7r ds  
Lx"GBEkt7  
%1z;l.c  
J~~\0 u  
调整为 |OQ]F  
rb?7i&-  
复制代码 代码如下: 1HJ: ?]  
3i^X9[.  
5#Er& 6s  
events { gF6> /  
worker_connections 10240; wmVmGa R  
} hA=uoe\  
0B6!$) *-i  
GT{4L]C  
#~0Nk6*u  
还是会出现上面问题,使用 :X>Wd+lY:_  
[root@qimutian nginx]# cat /proc/sys/fs/file-max ~Xi@#s~  
8192 1NYR8W]2  
文件系统最大可打开文件数 '%$Vmf)=  
[root@qimutian nginx]# ulimit -n 1 ?@HOu  
1024 {16a P  
程序限制只能打开1024个文件 \J LGw1F  
使用[root@qimutian nginx]# ulimit -n 8192调整一下 5F kdGF  
或者永久调整打开文件数 可在启动文件/etc/rc.d/rc.local末尾添加(在/etc/sysctl.conf末尾添加fs.file-max=8192) !do`OEQKR  
ulimit -n 8192 8/e-?2l  
调整CentOS5文件打开数 wAh]C;+{  
使用ulimit -a一下,发现OPEN FILES不能默认超过1024,昨天的在进行压力测试时,出现500错误,具体请查看 fA=Z):w  
nginx出现 500 Internal Server Error ,dC.|P' `  
早上起来看一下,发现原来是通过如下方式调整 d$IROZK-D  
方法1 (永久调整) Emlj,c<?j  
Dka,v  
vi /etc/security/limits.conf jY6GWsh:9  
hHJiGVJ=V  
在文件末加上: \,R;  
<AgB"y@  
* soft nofile 8192 SxF'2ii  
* hard nofile 20480 RELNWr  
.W]k 8N E  
同时vi /etc/sysctl.conf末尾添加 l7`{O/hN  
fs.file-max=8192 I Q_6DF  
重新启动,在使用ulimit -n查看的数已经是8192 f:Pl Mv!{  
ElO|6kOBYG  
方法2 (临时用) [O3:?BNY  
n)yDep]$G  
直接在终端输入 ulimit -n 8192 按回车就ok了 v3"6'.f;bY  
're:_;lG  
500 Internal Server Error错误补充: $RDlM  
/8; m.J>bf  
1、硬盘空间满了 wra0bS)4  
O)jD2X?  
使用 df -k 查看硬盘空间是否满了。清理硬盘空间就可以解决500错误。nginx如果开启了access log,在不需要的情况下,最好关闭access log。access log会占用大量硬盘空间。 ]i {yJ)i  
|]-Zz7N)  
2、nginx配置文件错误 36.,:!%p  
!hVbx#bXl  
这里不是指语法错误,nginx如果配置文件有语法错误,启动的时候就会提示。当配置rewrite的时候,有些规则处理不当会出现500错误,请仔细检查自己的rewrite规则。如果配置文件里有些变量设置不当,也会出现500错误,比如引用了一个没有值的变量。 !.P||$x`&  
t:2DB)  
3、如果上面的问题都不存在可能是模拟的并发数太多了,需要调整一下nginx.conf的并发设置数 N3"JouP  
qyM/p.mP  
解决方法是: QIiy\E%  
d+,!>.<3  
1 打开/etc/security/limits.conf文件,加上两句 6f +aGz  
~N!HxQ  
m* m),mZ"  
复制代码 代码如下: #gbB// <  
&_L%wV|[  
vH+g*A0S<  
* soft nofile 65535 [v~,|N>w  
* hard nofile 65535 lp}S'^ y  
R!dC20IMvH  
c`<2&ke  
C@XS  
2 打开/etc/nginx/nginx.conf 6 \8d6x>  
在worker_processes的下面增加一行 8n3]AOc'~-  
iTHwH{!  
D1rVgM  
复制代码 代码如下: &3SS.&g4W  
vX:}tir[  
worker_rlimit_nofile 65535;  w*`:v$  
mn@1&#c4y  
[e><^R*u  
3 重新启动nginx,重新载入设置 XO]^+'U}p  
5Od%Jhtt  
FQ>$Ps*a[  
复制代码 代码如下: gC?}1]9c  
O&?i#@5#  
kill -9 `ps -ef | grep php | grep -v grep | awk '{print $2}'` |:S6Gp[\O  
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 100 -u www-data -f /usr/bin/php-cgi -jJhiaJ$<  
killall -HUP nginx eC5*Q=ai,  
qy|bOl  
}sxs-  
!` 1h *}  
重启后再看nginx的错误日志,也没有发现500报错的情况了。 7RT{RE  
44e]sT.B  
SNqSp.>-U"  
4、有可能是数据库问题我的在nginx日志php日志都没有发现什么问题, 最后发现数据库访问不了,修正后问题解决. Lc~m`=B  
快速回复

限100 字节
安逸网提示:批量上传需要先选择文件,再选择上传
 
认证码:
上一个 下一个