Apache 启动报错详细解决

环境:CentOS-7 + Apache-2.4.37 + php-7.2.11 + nginx-1.14.0 + MySQL-7.5

配置

首先进行下简单配置,进入文件httpd.conf

vim /usr/local/apache/conf/httpd.conf
Listen 80   	## 配置端口
LoadModule vhost_alias_module modules/mod_vhost_alias.so  	##去掉’#‘
AddType application/x-httpd-php .php   	 ## 在加载 LoadModule 后添加这句
ServerName localhost:80  	## 将原来的‘#ServerName www.example.com:80’替换
# 将原来的 ‘Require all denied’ 替换为 Require all granted

    AllowOverride none
    Require all granted

## 加上 ‘Require all granted’,若有则不用

    Require all granted

## 加上  index.php

    DirectoryIndex index.html index.php

## 将 此句 # 去掉
# Virtual hosts
Include conf/extra/httpd-vhosts.conf

问题一

AH00112: Warning: DocumentRoot [/usr/local/apache/docs/dummy-host.example.com] does not exist
AH00112: Warning: DocumentRoot [/usr/local/apache/docs/dummy-host2.example.com] does not exist

原因:
Apache在配置虚拟主机时会在配置文件中(httpd.conf)开启虚拟主机的配置文件;

#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#Include conf/extra/httpd-vhosts.conf

将这两句前面的“#”去掉;

而“httpd-vhosts.conf ”中会有两个配置虚拟主机的例子:


   ServerAdmin [email protected]
   DocumentRoot "/usr/local/apache/docs/dummy-host.example.com"
   ServerName dummy-host.example.com
   ServerAlias www.dummy-host.example.com
   ErrorLog "logs/dummy-host.example.com-error_log"
   CustomLog "logs/dummy-host.example.com-access_log" common


   ServerAdmin [email protected]
   DocumentRoot "/usr/local/apache/docs/dummy-host2.example.com"
   ServerName dummy-host2.example.com
   ErrorLog "logs/dummy-host2.example.com-error_log"
   CustomLog "logs/dummy-host2.example.com-access_log" common

这样Apache在启动时就会去寻找以上两个不存在的文件夹,就会报错

解决方法:
方法一:新建出不存在的文件夹;

cd /usr/local/apache
mkdir -p docs/dummy-host2.example.com
mkdir -p docs/dummy-host.example.com

方法二:将“httpd-vhosts.conf ”中的例子注释掉;
方法三:配置虚拟主机时,不开启虚拟主机的配置文件,自己新建配置文件;

vim /etc/httpd/httpd.conf
#Include /etc/httpd/extra/httpd-vhosts.conf
Incloud /etc/httpd/extra/XXX.conf  #新建的配置文件一定要与“httpd-vhosts.conf”放在同一个文件夹内
Incloud /etc/httpd/extra/XXX.conf  #文件名称可以自己定义

问题二

(13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80

原因:
一般是IIS或其他程序(迅雷)占用了80端口引起的,引起的原因
https://wiki.apache.org/httpd/CouldNotBindToAddress
几种可能的解决方案:
(1)由于服务器的80端口被占用引起的,如果是windows的话就是IIS,停掉Default Web Site就可以了;
(2)将httpd.conf中的Listen 80行改为 Listen 81,换一个端口
(3)将httpd.conf中的Listen 80行改为 Listen 127.0.0.1:80

问题三

 (13)Permission denied: AH00091: httpd: could not open error log file /usr/local/apache/logs/error_log.
 AH00015: Unable to open logs

解决方法 1
网上各种查。。。。。。
原因:因为新安装的系统,所以SELinux默认是开启状态,关闭即可
解决:
1、临时关闭(不用重启机器):
复制代码 代码如下:

setenforce 0   	##设置SELinux 成为permissive模式
##setenforce 1 	设置SELinux 成为enforcing模式

2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
查看状态

[work@bogon ~]$ getenforce
Disabled

重启机器即可

但经本人测试还是报上述错误。。。。。。。。

解决方法 2
可能虚拟机没有 /usr/local/apache/logs/error_log. 文件
创建 error_log

touch /usr/local/apache/logs/error_log

检查httpd.conf文件,看user的设置,假设是daemon
则运行命令:

chown daemon:daemon /usr/local/apache/logs/error_log

在这里插入图片描述
网上差不多就这些答案了,但我的问题依然没解决,问大佬。。。。。

解决方法3

su - root  #必须换成root用户,切记“-”,我用的su root 只换了用户没变环境变量,汗颜。。。
netstat -an|grep 80  ##查看端口,"80" 换成你的

/usr/local/apache/bin/apachectl  start   #启动Apache

换成 root 用户,权限不够
在这里插入图片描述
浏览器访问:IP+PORT
Apache 启动报错详细解决_第1张图片
藉此终于好了!

总结:

su root 和 su - root的区别

su  后面不加用户是默认切到 root
su  是不改变当前变量
su - 是改变为切换到用户的变量 
也就是说su只能获得root的执行权限,不能获得环境变量
而su -是切换到root并获得root的环境变量及执行权限

curl

一个强大的命令!
https://www.cnblogs.com/duhuo/p/5695256.html

重启Apache

/usr/local/apache/bin/apachectl  start | stop | restart

lamp环境搭建

https://zhangguanzhang.github.io/2017/02/02/lamp/#%E8%87%AA%E5%B7%B1%E4%BA%B2%E8%BA%AB%E5%AE%9E%E8%B7%B5%E6%90%AD%E5%BB%BA%E7%9A%84lamp%E7%8E%AF%E5%A2%83-%E5%8E%9F%E5%88%9B%EF%BC%8C%E8%BD%AC%E8%BD%BD%E9%9C%80%E5%90%8C%E6%84%8F-%E7%9B%97%E7%89%88%E5%BF%85%E7%A9%B6

你可能感兴趣的:(计算机操作系统,lamp,Apache启动报错)