Apache 虚拟主机配置冲突导致 404 错误的排查总结

发布于:2025-08-15 ⋅ 阅读:(13) ⋅ 点赞:(0)

1. 问题现象
  • 访问服务器 IP(http://192.168.88.120)返回 404 Not Found

  • 确认 /var/www/html/index.html 文件存在且内容正确(web1)。

  • 检查发现 /etc/httpd/conf.d/ 下存在多个虚拟主机配置(如 a.org.confb.org.conf),均定义了不同的 DocumentRoot


2. 根本原因
  • 虚拟主机覆盖默认配置
    Apache 加载虚拟主机时,若未明确匹配到 ServerName 或 ServerAlias,可能错误使用某个虚拟主机的 DocumentRoot,而非默认的 /var/www/html

  • 缺少默认主机
    无 <VirtualHost *:80> 默认配置时,Apache 会按文件名顺序选择第一个虚拟主机作为“兜底”,导致访问 IP 时返回错误路径。


3. 解决方案
方法 1:添加默认虚拟主机

在 /etc/httpd/conf.d/ 下创建优先级最高的配置文件(如 00-default.conf):

bash

sudo vi /etc/httpd/conf.d/00-default.conf

内容:

<VirtualHost *:80>
    DocumentRoot "/var/www/html"
    ServerName localhost
    ServerAlias 192.168.88.120  # 替换为你的服务器IP
    <Directory "/var/www/html">
        Require all granted
    </Directory>
</VirtualHost>

重启 Apache:

sudo systemctl restart httpd
方法 2:禁用冲突的虚拟主机(测试用)

临时重命名其他虚拟主机配置以排除干扰:

sudo mv /etc/httpd/conf.d/a.org.conf /etc/httpd/conf.d/a.org.conf.bak
sudo mv /etc/httpd/conf.d/b.org.conf /etc/httpd/conf.d/b.org.conf.bak
sudo systemctl restart httpd

测试后恢复:

sudo mv /etc/httpd/conf.d/a.org.conf.bak /etc/httpd/conf.d/a.org.conf
sudo mv /etc/httpd/conf.d/b.org.conf.bak /etc/httpd/conf.d/b.org.conf
方法 3:明确指定虚拟主机的匹配规则

确保其他虚拟主机配置中 仅响应特定域名,避免匹配到 IP 请求:

# 例如:/etc/httpd/conf.d/a.org.conf
<VirtualHost *:80>
    DocumentRoot "/var/www/html/a.org"
    ServerName a.org      # 必须指定域名
    ServerAlias www.a.org # 可选别名
</VirtualHost>


网站公告

今日签到

点亮在社区的每一天
去签到