使用FritzBox与Apache的ServerName配置子域名时遭遇DNS解析失败问题
看起来你碰到的问题其实和Apache的ServerName配置关系不大,核心是DNS解析失败——咱们一步步来理清楚:
问题根源分析
你能正常访问主域名<MYFRITZ>.myfritz.net,说明FritzBox的端口转发和Apache主虚拟主机配置都没问题。但子域名test.MYFRITZ.myfritz.net提示DNS无法找到地址,这意味着:浏览器根本没找到这个子域名对应的公网IP,连请求都没发送到你的Apache服务器上。
Apache的ServerName只是用来区分不同虚拟主机的请求,但前提是这个域名已经能正确解析到你的服务器IP。myfritz.net的动态DNS服务默认只提供主域名的解析,子域名不会自动生效,必须额外配置。
具体解决步骤
检查FritzBox的动态DNS子域名支持
登录你的FritzBox后台,找到「动态DNS(Dynamic DNS)」的配置页面。部分型号的FritzBox允许在myfritz.net域名下添加自定义子域名,你需要在这里注册test这个子域名,让它指向你的公网IP。保存配置后,等待几分钟让DNS生效。如果FritzBox不支持子域名,换用自定义域名
如果你的FritzBox型号不支持myfritz.net的子域名,建议购买一个自己的域名(比如example.com),然后在域名服务商的后台设置:- 添加A记录:
test.example.com,指向你的公网IP - 同时配置动态DNS更新,让FritzBox把实时的公网IP同步到域名服务商(大部分域名服务商支持DDNS,或者用第三方工具比如ddclient)
- 添加A记录:
临时验证Apache配置是否正确
如果你想先确认Apache的虚拟主机配置没问题,可以在本地电脑的hosts文件里添加一条记录(仅本地生效):你的公网IP test.MYFRITZ.myfritz.net然后重启浏览器访问子域名,如果能正常打开
/var/www/404b里的内容,说明Apache配置是对的,问题确实出在DNS上。确认Apache配置无语法错误
执行以下命令检查配置:sudo apache2ctl configtest如果提示
Syntax OK,就重启Apache服务:sudo systemctl restart apache2
备注:内容来源于stack exchange,提问作者Jannek S.

