1. 问题现象
访问服务器 IP(
http://192.168.88.120
)返回 404 Not Found。确认
/var/www/html/index.html
文件存在且内容正确(web1
)。检查发现
/etc/httpd/conf.d/
下存在多个虚拟主机配置(如a.org.conf
、b.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>