Ubuntu 16.04 虚拟主机配置后无法正常解析求助
虚拟主机解析跳转至真实域名的排查方案
我来帮你搞定这个虚拟主机解析异常的问题,从你描述的情况来看,核心问题应该是本地域名解析优先级或者Apache配置中的意外重定向导致的,咱们一步步排查:
1. 确认本地hosts文件的解析优先级
Linux系统是通过/etc/nsswitch.conf里的hosts配置项决定解析顺序的,如果它把DNS放在hosts前面,那即使你在/etc/hosts里加了记录,系统还是会优先去查公共DNS,拿到example.com的真实IP。
你需要打开你的/etc/nsswitch.conf,找到这一行:
hosts: files dns
如果你的配置是hosts: dns files(先查DNS),就把它改成上面的样子,让系统先读取本地hosts文件。
2. 清除本地DNS缓存
即使改了优先级,之前缓存的DNS记录可能还在生效,执行对应命令清空缓存:
- 用systemd-resolved的系统(比如Ubuntu 18.04+):
sudo systemd-resolve --flush-caches - 老版本Ubuntu/Debian:
sudo service dns-clean restart
3. 验证本地解析是否生效
执行以下命令,看看example.com的解析结果是不是127.0.0.1:
ping example.com -c 2 # 或者用dig更清晰 dig example.com
如果返回的IP还是93.184.216.34,说明hosts解析没生效,回到第一步再检查nsswitch.conf的配置;如果返回127.0.0.1,那问题出在Apache配置上。
4. 检查Apache虚拟主机配置的重定向
打开你的/etc/apache2/sites-available/example.com.conf,看看有没有以下内容:
- 有没有
Redirect permanent / https://example.com这类全局重定向 - 有没有
RewriteRule规则把请求跳转到真实域名 - 有没有配置了
ServerAlias或者其他指向真实域名的设置
确保配置文件的核心部分是类似这样的(没有意外重定向):
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/example.com.error.log CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined </VirtualHost>
修改后记得重启Apache(不要只reload,重启更彻底):
sudo systemctl restart apache2
5. 排除浏览器缓存干扰
有时候浏览器会缓存旧的DNS记录或者跳转规则,建议用隐私窗口访问example.com,或者清空浏览器的缓存和Cookie再测试。
内容的提问来源于stack exchange,提问作者bunower
相关产品推荐
相关产品推荐

