网站出现 500 错误,首先检查 Error Log 中有没有相应的错误提示。如果没有,就再访问一下出错的页面等一会再看。一般从错误日志中都可以看到错误原因。
一.错误日志中可能显示的各种错误及解决方法:
A.目录或者文件的权限不对错误日志里会显示:
SoftExceptioninApplication.cpp:256:Director“/home/name/public_html/xxxx/xxxx/” is writeable by group
将 public_html 目录的权限修改为 755 或者 750。原因是因为 cPanel 服务器默认采用的是 suphp, suphp 默认会以 owner 的身份运行文件,目录和文件默认权限是 755 和 644。
如果目录权限为 775 或者 777,文件权限为 664 或者 666,访问就会出现 500 内部服务器错误。
B.htaccess 文件配置错误
错误日志会显示:
Invalid command ‘.\xe3\x80\x82′, perhaps misspelled or defined by a module not included in the server configuration
这就说明.htaccess 中的语法有问题,需要检查这个文件。如果想暂时解决这个内部服务器错误,可以先将.htaccess 注释掉,如前面加#号。保证网站正常访问后排查到底哪里出问题了。
二.如果错误日志中没有任何错误提示,可能有两种原因:网站程序问题或者服务器问题。
A.网站程序问题
可以这样作判断,将目录下的索引页如 index.php 文件重命名,新建一个 index.php,里面写上“网络私房菜”,然后访问,如果访问正常,说明服务器执行 php 是没问题的,肯定是网站程序有问题。这个时候就要检查程序了。如果是常用的 CMS 如 WordPress 或者Discuz 等可以考虑重装看看。如果是找人开发的,那就需要自己去检查了。
B.服务器问题
重点说下因为服务器原因导致网站 500 错误。典型表现为:服务器上用户网站访问都是 500错误。当然不排除少部分用户可以正常访问,为什么呢?因为他们的域名压根没解析到这台服务器或者他的是简单.html 页面,与 php 没有关系。
服务器的原因导致 500 错误有以下几种解决方法:
1、 最简单、直截了当的是重新编译下 Apache 看看。很多时候如攻击或者安装了一些模块都可能导致 Apache 某一块出错,这个时候用户网站访问都会出现 500.如果是服务器管理人员,可以通过 WHM 中的 Software>EasyApache(Apache Update)这个功能来重新编译Apache 或者通过使用 ssh 远程连接工具用 root 登录后执行/scripts/easyapache 或者/scripts/easyapache –build 都可以。大概二十分钟就可以编译好。但是根据我个人经验是不要太盲目就执行这个操作,应该先尽力去检查原因。
2、如果重新编译 Apache 后网站还是 500 的话,就要考虑下是不是自己的思路错了(上面 1验证了要先查原因,不要盲目就编译 Apache,虽然它能解决一些问题)。这时候可以检查下服务器最近的错误日志:
tail -n 200 /usr/local/apache/logs/error_log
来锁定具体错误。常见的有:
(1).SoftException in Application.cpp:592: Directory /home is not owned by XXX说明/home 目录的属性不对,通过 ls -al /home 查看下/home 目录本身的拥有者和组是不是 root,不是的话要改过来。通过 chown root:root /home 即可。
(2).SoftException in Application.cpp:422: Mismatch between target UID (506)and UID (500) of file “/home/cpusername/public_html/index.php”
说明 cpusername 这个用户的 public_html 目录的属性有问题,检查下其拥有者和用户组是不是 cpusername 和 nobody。
chown -R cpusername:c pusername /home/hddidcxhh/public_html
chown cpusername:nobody /home/hddidcxhh/public_html
(3)SoftExceptioninApplication.cpp:363:GIDofscript”/home/hddidcxhh/public_html/wptest/index.php” is smaller than min_gid
说明 cpusername 这个用户的 public_html 目录的属性有问题,检查下其用户组是不是nobody 的。
chgrp nobody /home/hddidcxhh/public_html/wptest/index.php
(4).SoftExceptioninApplication.cpp:256:File“/home/cpusername/public_html/directory/index.php” is writeable by group,这个一般是 index.php 的权限不正确,改成默认的 644 即可。
chmod 644 /home/hddidcxhh/public_html/directory/index.php
如果上面路径最后一个是目录,就改成 755