【故障分析】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
至此,这个案例被完整剖析!
本文标题:【故障分析】apache启动失败
标题路径:https://www.cdcxhl.com/news/105384.html
成都网站建设公司_创新互联,为您提供用户体验、搜索引擎优化、Google、网站排名、小程序开发、移动网站建设
广告
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源:
创新互联