var
您好,欢迎访问景安网络旗下资讯网!
运营 建站 系统 数据库 编程

首页 > 服务器维护  >【故障分析】apache启动失败

【故障分析】apache启动失败

来源:景安IDC资讯作者:server发布时间:2015-10-20点击:1630

客户的一台web服务器,是基于Apache+JK+Tomcat构建的一个电商平台,在机器更换硬件重新启动后,客户反映apache启动失败,但是tomcat可以启动,启动Apache的错误信息如下。

【故障分析】apache启动失败

1、故障分析

客户的一台web服务器,是基于Apache+JK+Tomcat构建的一个电商平台,在机器更换硬件重新启动后,客户反映apache启动失败,但是tomcat可以启动,启动Apache的错误信息如下。

【故障分析】apache启动失败

于是又检查了操作用户和Apache监听的端口,如下图。

【故障分析】apache启动失败

从输出可知,Apache的启动用户是www,监听端口为80,接着查看到/usr/local/apache2/目录所有文件和目录的权限都是www,看来不是读写权限的问题,于是继续排查,这里更换了Apache的监听端口,将其改为8000,看是否能启动成功,如下图。

【故障分析】apache启动失败

虽然这次启动没报错,但是根据httpd进程的状态来看,启动应该还有问题,于是查看Apache启动日志,如下图。

【故障分析】apache启动失败

从日志输出看,果然存在问题,通过存在问题,通过日志基本判断是Apache的pid文件无权限导致的。接着检查httpd.pid文件的选项,操作如下:

[root@cloud1 logs]# ll/usr/local/apache2/logs/httpd.pid

-rw-r--r-- 1 root www 6 Sep 16 17:33

/usr/local/apache2/logs/httpd.pid

从输出可知,httpd.pid权限的属主为root,将其修改为www用户,操作如下:

[root@cloud1 logs]# chown www/usr/local/apache2/logs/httpd.pid

然后,重庆Apache2,如下图。

【故障分析】apache启动失败

可以看到,这次Apahce启动成功了,看来Apache配置并无问题,通过8000端口可以启动,而通过80端口则无法启动,这是什么问题呢?

2、解决思路

既然这个案例是与端口相关的,那么久需要了解下Linux系统中的端口,在Linux系统下可用的端口范围是1-65535,端口可分为三类,分别是公认端口、注册端口和动态端口。

用户www无法启动Apache的80端口,就是因为80端口属于公认端口,普通公认端口,普通用户无权绑定,而8000端口属于注册端口,普通用户可以自由使用,这就是此案例要查找的原因。

3、解决问题

如何使用Apache的80端口呢,这里提供两种方法,分别是:

1)将Apache以root用户启动即可,这是最简单的方法。

2)修改Apache目录下httpd文件的SUID属性。

第一种方法实现简单,但是有安全问题,如果黑客入侵了80端口,那么他也就拥有了root权限,因此,不推荐使用第一种方法,因为保证程序的安全才是根本。这里简单介绍下第二种方法的实现过程。首先通过root用户进行如下授权,如下图。

【故障分析】apache启动失败

然后再www用户下再次启动Apache,可以看到这次启动正常了,如下图。

【故障分析】apache启动失败

从这个输出可以看出,其实Apache还是在root用户下启动的,上面的修改只不过是保证普通用户可以正常启动Apache而已,另外,启动的httpd进程对应的用户除了root,还有www用户,这其实是一种父进程和子进程的关系,父进程由root用户启动后,会派生出多个子进程,而这些子进程的启动用户是可定义的,可以在配置文件httpd.conf的如下选项中修改:

User www

Group www

至此,这个案例被完整剖析!


关键词: apache启动失败

版权声明:本文系技术人员研究整理的智慧结晶,转载勿用于商业用途,并保留本文链接,侵权必究!

本文链接:https://www.zzidc.com:443/info/fwqwh/1104.html

返回顶部