从Ubuntu迁移到Mint后Apache2虚拟主机报错:无法解析主机名
嘿,我来帮你解决这个迁移后遇到的Apache问题!先看你贴的错误日志[core:error] [pid 3012] (EAI 2)Name or service not known: AH00547: Could not resolve host name,核心问题其实出在虚拟主机配置的写法上,咱们一步步来修复:
1. 修正VirtualHost的格式错误
你现在的配置里写了<VirtualHost *.domain.localhost:80>,这是不对的!Apache的<VirtualHost>指令不能用带通配符的域名作为监听目标,正确的做法是监听所有IP的80端口,然后靠ServerName和ServerAlias来匹配具体域名。修改后的配置应该是这样:
<VirtualHost *:80> ServerName domain.localhost ServerAlias www.domain.localhost api.domain.localhost ServerAdmin webmaster@localhost DocumentRoot /home/dev/projects/domain/web/html/ <Directory /home/dev/projects/domain/web/html/> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require all granted </Directory> ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature Off </VirtualHost>
*.domain.localhost这种通配符格式只能用在ServerAlias里,别放错地方啦。
2. 确认/etc/hosts配置没问题
既然你已经把域名加到/etc/hosts了,再核对下格式是否正确,应该是这样的:
127.0.0.1 domain.localhost www.domain.localhost api.domain.localhost ::1 domain.localhost www.domain.localhost api.domain.localhost
可以用ping domain.localhost测试下,能返回127.0.0.1就说明解析没问题。
3. 验证配置+启用站点+重启服务
这三步是关键,别漏了:
- 先检查配置文件语法是否合法,避免因为语法错误导致服务回滚到默认配置:
看到sudo apache2ctl configtestSyntax OK再继续,不然根据提示改语法问题。 - 启用你的虚拟主机配置(假设配置文件名叫
domain.conf):sudo a2ensite domain.conf - 重新加载Apache服务,让新配置生效:
sudo systemctl reload apache2
4. 关于权限配置的小补充
你的权限配置步骤整体是没问题的,不过提个醒:chmod 660 -R PATH_TO_DIR会把所有文件和目录都设为660,而目录需要执行权限才能被访问,好在你后面用chmod -R -x+X PATH_TO_DIR修正了目录的执行权限,这部分做得很对,确保www-data用户能正常读写访问。
为啥会恢复到默认状态?
当Apache检测到配置有语法错误时,重新加载服务会失败,这时候它会自动 fallback 到之前有效的配置(也就是你禁用的000-default.conf),所以每次改完配置一定要用apache2ctl configtest检查语法,避免白忙活。
内容的提问来源于stack exchange,提问作者magic.77

