• 1515阅读
  • 0回复

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

楼层直达
现在越来越多的站点开始用 Nginx ,("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。 rfXxg^  
$ Y/9SD  
在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据测试结果,Nginx 0.6.31 + PHP 5.2.6 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。 /{M<FVXK+|  
p/H.bG!z  
但很多人用 Nginx 的时候都会出现 500 错误,根据我使用的情况来看,很大一部分原因是 因为文件打开句柄太小有关。 Q eeV<  
k,h602(  
在linux 下 使用这个命令增加进程打开的文件句柄。 VPLf(  
ulimit -SHn 51200 `lhw*{3A  
默认只用1000 当链接数小的时候看不出来,使用这种处理方法可以有效防止500错误出现。 }nmlN  
今天访问网站的时候,偶尔会遇上500 Internal Server Error的错误提示页面. ]#/nn),Z  
查了相关资料认为是访问过大,系统内核进程受限才出现的. m5Bf<E,c  
Gnc`CyN:H  
答案如下: spK8^sh  
&@=Jm /5  
$ ulimit -n ,'L>:pF3  
11095 P.~UU S  
(d9~z  
程序限制只能打开11095个文件,ulimit命令是设置当前用户一个进程可拥有的文件描述符的数量. =SDex.ZK]  
看来是模拟的并发数太多了,需要调整一下nginx.conf的并发设置数,(我的配置主机的内存2G,CPU为2.8G,) fN vQ.;  
l;8t%JV5  
_,3ljf?WQM  
复制代码 代码如下: 'nmGHorp  
7>hcvML  
X9>fE{)!  
vi /etc/nginx/nginx.conf MT6p@b5  
events { zLJ>)v$81  
worker_connections 1024; 1(' wg!  
} K)SWM3r  
U1 `5P!ov  
H4M=&"ll}  
0d2P   
调整为 3Tr,waV  
J,$xQ?,wE  
复制代码 代码如下: 1 UQ,V`y  
E|pT6  
-"-.Z&#  
events { rfV'EjiM}  
worker_connections 10240; <Bo\a3Z  
} a\sK{`|X*  
ED0cnr\yG  
?K$&|w%{3  
Zo UeLU  
还是会出现上面问题,使用 l|q-kRRjn  
[root@qimutian nginx]# cat /proc/sys/fs/file-max t 7Y*/v&P(  
8192 ?NBae\6r  
文件系统最大可打开文件数 Ry95a%&/s  
[root@qimutian nginx]# ulimit -n _2KIe(,;  
1024 +~n:*\  
程序限制只能打开1024个文件 cvcZ\y  
使用[root@qimutian nginx]# ulimit -n 8192调整一下 \.2i?<BC  
或者永久调整打开文件数 可在启动文件/etc/rc.d/rc.local末尾添加(在/etc/sysctl.conf末尾添加fs.file-max=8192) ?j&hG|W9<z  
ulimit -n 8192 G]h_z|$K  
调整CentOS5文件打开数 SM~~:  
使用ulimit -a一下,发现OPEN FILES不能默认超过1024,昨天的在进行压力测试时,出现500错误,具体请查看 aiPm.h>  
nginx出现 500 Internal Server Error a!R*O3  
早上起来看一下,发现原来是通过如下方式调整 ILr=< j  
方法1 (永久调整) zgY VB}  
aV5M}:D  
vi /etc/security/limits.conf /KvJjt'8  
A~xw:[zy$a  
在文件末加上: *=i&n>  
@Ommd{0M  
* soft nofile 8192 ECt<\h7}  
* hard nofile 20480 jyD~ER}J  
.@): Uh  
同时vi /etc/sysctl.conf末尾添加 .@fA_8  
fs.file-max=8192 W,EIBgR(R5  
重新启动,在使用ulimit -n查看的数已经是8192 tN<X3$aN  
QM8Ic,QFvo  
方法2 (临时用) |Uics:cQC  
f I=G>[  
直接在终端输入 ulimit -n 8192 按回车就ok了 /-v ;  
^R:&c;&,  
500 Internal Server Error错误补充: rJGh3%  
|kK5:\H  
1、硬盘空间满了 WP*}X7IS  
hu$eO'M_  
使用 df -k 查看硬盘空间是否满了。清理硬盘空间就可以解决500错误。nginx如果开启了access log,在不需要的情况下,最好关闭access log。access log会占用大量硬盘空间。 A:ts_*  
UhqTn$=fb  
2、nginx配置文件错误 hYpxkco"4'  
k Nc- @B  
这里不是指语法错误,nginx如果配置文件有语法错误,启动的时候就会提示。当配置rewrite的时候,有些规则处理不当会出现500错误,请仔细检查自己的rewrite规则。如果配置文件里有些变量设置不当,也会出现500错误,比如引用了一个没有值的变量。 3N$@K"qM#  
( 0/M?YQF  
3、如果上面的问题都不存在可能是模拟的并发数太多了,需要调整一下nginx.conf的并发设置数 1iY4|j;ahV  
)M dddz4  
解决方法是: M>Q ZN  
<[\I`kzq  
1 打开/etc/security/limits.conf文件,加上两句 joskKik^  
@Pk<3.S0  
&u[{VR:  
复制代码 代码如下: F$\Da)Y  
LUD .  
^Zz^h@+  
* soft nofile 65535 Q&.uL}R  
* hard nofile 65535 yn}Dj9(q  
=tD*,2]  
60^j<O  
9no<;1+j,  
2 打开/etc/nginx/nginx.conf s4_Dqm  
在worker_processes的下面增加一行 iGhvQmd(/*  
H9)n<r  
,:PMS8pS  
复制代码 代码如下: N\*oL*[j  
A .&c>{B7  
worker_rlimit_nofile 65535; Mc.{I"c@  
:ZY%-]u7  
3S3(Gl  
3 重新启动nginx,重新载入设置 ]0*aE  
=!q]0#  
~\JB)ca.  
复制代码 代码如下: Y:;_R=M  
QIMd`c  
kill -9 `ps -ef | grep php | grep -v grep | awk '{print $2}'` T;(,9>Qsu  
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 100 -u www-data -f /usr/bin/php-cgi (.P}>$M9  
killall -HUP nginx 3%'`^<-V  
}d}gb`Du  
<@(\z   
6"G(Iq'2t3  
重启后再看nginx的错误日志,也没有发现500报错的情况了。 :ir#7/  
M,JwoKyg  
^5]9B<i[Y  
4、有可能是数据库问题我的在nginx日志php日志都没有发现什么问题, 最后发现数据库访问不了,修正后问题解决. \;Q(o$5<  
快速回复

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