• 1512阅读
  • 0回复

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

楼层直达
现在越来越多的站点开始用 Nginx ,("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。 \(A>~D8Fo  
wDSU~\  
在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据测试结果,Nginx 0.6.31 + PHP 5.2.6 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。 pFG~XW  
Nls|R  
但很多人用 Nginx 的时候都会出现 500 错误,根据我使用的情况来看,很大一部分原因是 因为文件打开句柄太小有关。 4b<:67 %  
xW^<.@Agm  
在linux 下 使用这个命令增加进程打开的文件句柄。 z#-&MJ  
ulimit -SHn 51200 c(eu[vj:  
默认只用1000 当链接数小的时候看不出来,使用这种处理方法可以有效防止500错误出现。 0_Y;r{3m"  
今天访问网站的时候,偶尔会遇上500 Internal Server Error的错误提示页面. g:*yjj  
查了相关资料认为是访问过大,系统内核进程受限才出现的. JY_' d,O  
6DExsB~@  
答案如下: dFS+O;zE\  
4+uAd"  
$ ulimit -n bZKK' d$I  
11095 <ZnAPh  
aFbA=6  
程序限制只能打开11095个文件,ulimit命令是设置当前用户一个进程可拥有的文件描述符的数量. Ml)WY#7  
看来是模拟的并发数太多了,需要调整一下nginx.conf的并发设置数,(我的配置主机的内存2G,CPU为2.8G,) B,A/ -B\  
:0vNg:u+  
|w:\fK[  
复制代码 代码如下: >uI|S  
dM$]OAT  
gjwp' GN  
vi /etc/nginx/nginx.conf jd$lu^>I  
events { N7[i443a  
worker_connections 1024; WJhI6lu  
} `s.y!(`q  
2avSsN{^  
zfv l<"Rv  
i)eub`uMy  
调整为 P=V~/,>SZ!  
<b{ApsRJf  
复制代码 代码如下: #N7@p }P  
``0knr <  
\-c70v63X  
events { R ]HHbD&;  
worker_connections 10240; 0f1*#8-6  
} \V}?K0#bt  
uh@ZHef[l  
TLw.rEN!;  
L%I@HB9-Q0  
还是会出现上面问题,使用 3 /oVl 6  
[root@qimutian nginx]# cat /proc/sys/fs/file-max A]Qg X5\sa  
8192 <mi*AY  
文件系统最大可打开文件数 0LN"azhz  
[root@qimutian nginx]# ulimit -n gT?:zd=;  
1024 E&#cU}ErN  
程序限制只能打开1024个文件 QS\H[?M$  
使用[root@qimutian nginx]# ulimit -n 8192调整一下 j/ow8Jmc*  
或者永久调整打开文件数 可在启动文件/etc/rc.d/rc.local末尾添加(在/etc/sysctl.conf末尾添加fs.file-max=8192) #2^eGhwnI  
ulimit -n 8192 <My4 )3  
调整CentOS5文件打开数 !EB<e5}8wK  
使用ulimit -a一下,发现OPEN FILES不能默认超过1024,昨天的在进行压力测试时,出现500错误,具体请查看 $oDc  
nginx出现 500 Internal Server Error {mr!E  
早上起来看一下,发现原来是通过如下方式调整 nc4KeEl  
方法1 (永久调整) iGlg@  
/g(WCKva  
vi /etc/security/limits.conf :qy< G!o  
+#ufW%ZG  
在文件末加上: e98f+,E/  
}$ C;ccWL  
* soft nofile 8192 w=JO$7  
* hard nofile 20480 r9sq3z|%  
uC$!|I  
同时vi /etc/sysctl.conf末尾添加 5! -+5TJI  
fs.file-max=8192 n4Xh}KtH  
重新启动,在使用ulimit -n查看的数已经是8192 Q 8| C>$n  
HD%n'@E  
方法2 (临时用) pz4lC=H%o  
9 t8NK{  
直接在终端输入 ulimit -n 8192 按回车就ok了 12]rfd   
>uLWfk+y1  
500 Internal Server Error错误补充: a=_:`S]}  
Dbl3ef  
1、硬盘空间满了 {q!GTO  
h~`^H9?M  
使用 df -k 查看硬盘空间是否满了。清理硬盘空间就可以解决500错误。nginx如果开启了access log,在不需要的情况下,最好关闭access log。access log会占用大量硬盘空间。 4++ &P9  
X*w7q7\8-:  
2、nginx配置文件错误 ls({{34NF  
`(uN_zvH  
这里不是指语法错误,nginx如果配置文件有语法错误,启动的时候就会提示。当配置rewrite的时候,有些规则处理不当会出现500错误,请仔细检查自己的rewrite规则。如果配置文件里有些变量设置不当,也会出现500错误,比如引用了一个没有值的变量。 A1Es>NK[qW  
PiIP%$72O  
3、如果上面的问题都不存在可能是模拟的并发数太多了,需要调整一下nginx.conf的并发设置数 VX:Kq<XwQ  
XwZR Kh\>=  
解决方法是: <5!)5+G  
:z-?L0C=0  
1 打开/etc/security/limits.conf文件,加上两句 9fy[%M  
)8E[xBaO  
o&$Of  
复制代码 代码如下: #Xk/<It  
{)I&&fSz  
l0PXU)>C  
* soft nofile 65535 $\#wsI(  
* hard nofile 65535 s54AM]a{j  
m 0]1(\%  
=, 64Qbau  
A |P wm`  
2 打开/etc/nginx/nginx.conf E J&w6),d  
在worker_processes的下面增加一行 Q sPZ dC  
xUPg~c0  
nj#kzD[n>  
复制代码 代码如下: /&em%/  
C;YtMY:  
worker_rlimit_nofile 65535; ] V,#>'  
82YZN5S3]3  
POQ4&ChA  
3 重新启动nginx,重新载入设置 [M?&JA_$}  
hdpA& OteR  
loD:4e1  
复制代码 代码如下: xgIb4Y%  
,[u.5vC  
kill -9 `ps -ef | grep php | grep -v grep | awk '{print $2}'` #&Zj6en}M]  
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 100 -u www-data -f /usr/bin/php-cgi `L"l{^cH  
killall -HUP nginx Vah.tOU  
K>Tv M&  
6z5?9I4[  
;h4w<OqcM  
重启后再看nginx的错误日志,也没有发现500报错的情况了。 `7_s@4:  
{&h=  
#+;0=6+SM  
4、有可能是数据库问题我的在nginx日志php日志都没有发现什么问题, 最后发现数据库访问不了,修正后问题解决. l_ycB%2e^  
快速回复

限100 字节
安逸网提示:如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
认证码:
上一个 下一个