首先,我猜你已经从源代码构建了 apache - 这样做有什么具体原因吗?我通常会发现,如果您使用标准分发包或使用其他 repos 中的新包(如果您需要更高版本),系统会更易于管理。
如果您没有特别需要使用本地构建的 apache,我建议您删除它,然后使用普通的 CentOS 存储库安装 apache。
接下来(或者首先,如果您使用本地构建的 apache),运行:httpd -V
例如,我的一个系统返回:
[me@here ~]# httpd -V
Server version: Apache/2.2.3
Server built: Jun 6 2012 10:00:36
Server's Module Magic Number: 20051115:3
Server loaded: APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture: 32-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="run/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
输出会告诉你它真正的配置文件在哪里,在这种情况下是 /etc/httpd/conf/httpd.conf - 这样你就会知道哪个配置是实际使用的。
一旦您知道正在使用哪些配置文件,您就可以检查它们以查看文档根目录的位置 - 它可能在/var/www/html/
而不是/usr/local/apache2/htdocs
或几乎在任何地方。
当您知道文档根目录在哪里时,请检查并确保 apache 可以读取文件和目录(或者任何运行 apache 的用户 - 第一列ps aux | grep httpd
会告诉您)
接下来检查日志文件,通常/var/log/httpd/error_log
还有系统登录/var/log/messages
和/var/log/secure
最后,如果您运行的是启用了 SELinux 的最新 CentOS,并且您自己构建了 apache,那么您几乎肯定会陷入痛苦的世界。您可以尝试getenforce
查看 SELinux 是否处于活动状态,并setenforce 0
禁用它(用于测试)。