【故障分析】apache启动失败

发布时间:2025-07-18 点击:6
【故障分析】apache启动失败
客户的一台web服务器,是基于apache+jk+tomcat构建的一个电商平台,在机器更换硬件重新启动后,客户反映apache启动失败,但是tomcat可以启动,启动apache的错误信息如下。
于是又检查了操作用户和apache监听的端口,如下图。
从输出可知,apache的启动用户是www,监听端口为80,接着查看到/usr/local/apache2/目录所有文件和目录的权限都是www,看来不是读写权限的问题,于是继续排查,这里更换了apache的监听端口,将其改为8000,看是否能启动成功,如下图。
虽然这次启动没报错,但是根据httpd进程的状态来看,启动应该还有问题,于是查看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,如下图。
可以看到,这次apahce启动成功了,看来apache配置并无问题,通过8000端口可以启动,而通过80端口则无法启动,这是什么问题呢?
1、解决思路
既然这个案例是与端口相关的,那么久需要了解下linux系统中的端口,在linux系统下可用的端口范围是1-65535,端口可分为三类,分别是公认端口、注册端口和动态端口。
用户www无法启动apache的80端口,是因为80端口属于公认端口,普通公认端口,普通用户无权绑定,而8000端口属于注册端口,普通用户可以自由使用,这是此案例要查找的原因。
2、解决问题
如何使用apache的80端口呢,这里提供两种方法,分别是:
1)将apache以root用户启动即可,这是最简单的方法。
2)修改apache目录下httpd文件的suid属性。
种方法实现简单,但是有安全问题,如果黑客入侵了80端口,那么他也拥有了root权限,因此,不推荐使用种方法,因为保证程序的安全才是根本。这里简单介绍下第二种方法的实现过程。首先通过root用户进行如下授权,如下图。
然后再www用户下再次启动apache,可以看到这次启动正常了,如下图。
从这个输出可以看出,其实apache还是在root用户下启动的,上面的修改只不过是保证普通用户可以正常启动apache而已,另外,启动的httpd进程对应的用户除了root,还有www用户,这其实是一种父进程和子进程的关系,父进程由root用户启动后,会派生出多个子进程,而这些子进程的启动用户是可定义的,可以在配置文件httpd.conf的如下选项中修改:
user www
group www
至此,这个案例被完整剖析!


广州和网站建设基础知识你了解多少
网站优化排名消失的原因有哪些?
网站建设如何编写需求分析
网站建设公司不断减少,坚持下来的都靠谱!
恰当的文字排版一样可以让网站设计富有吸引力
高效管理工具是数据中心节能关键
上海网站建设公司和上海网站设计公司,让产品的市场前景更为广阔
国内疫情好转 如何抓住逐渐复苏的流量