红联Linux门户
Linux帮助

Ubuntu系统Apache无法解析与FQDN同名虚拟主机问题解决

发布时间:2016-03-16 15:29:03来源:kaijia.me作者:linux人

之前配置Apache服务器时遇到了这样问题,现在把当时的处理记录一下。一般情况下单台Apache服务器倾向于运行单个站点,此时只需要将代码目录放置到/var/www/html文件夹中即可。但当单台Apache服务器需要运行多个站点时我们就会用到Apache服务器的VirtualHost技术。的博客服务器一开始将短地址服务设置为默认的主机,这样所有通过错误域名访问或直接扫描IP的请求就会跳转到的博客(增加博客访问量。),但经过一段时间后发现这类访问多但转化率极低而且基本上都是机器人,只会影响服务器性能,因此现在考虑将默认的站点留空,这样看到的就是Ubuntu的默认静态页面,可以起到降低负载的作用。


于是将/etc/apache2/sites-available/000-default.conf文件中的ServerName改回了localhost,然后又新建了一个ServerName为.me(运行短地址程序)的VirtualHost。重新载入配置后却发现Apache无法正常解析.me的VirtualHost。于是做了一些调试,发现无论将ServerName改成任何域名,VirtualHost都能被正常解析,只有ServerName使用.me时,网站才无法正常打开,而会直接使用000-default.conf中的默认站点。

由于.me是服务器的FQDN,很快就意识到按照标准的配置,Apache可能无法有效解析与服务器Hostname相同的VirtualHost。一开始以为这是Apache的Bug,搜索了好久找到了一个Server Fault上的一个类似错误报告,发现可能是由于特定的系统环境造成的。这篇错误的讨论认为这个问题可能是由于Debian/Ubuntu解析FQDN的方式造成的(没有详细写之后将继续研究)。


虽然这篇错误报告没有解决问题,但给出了很多替代方案,包括修改hosts和hostname文件等,但或多或少都要改变Apache配置文件外的系统设置,因此没有使用这些方案。查阅了Apache的系统文档之后,使用了一种比较便捷的方案:将原来ServerName中的域名移动到ServerAlias,而ServerName则使用其他域名。由于ServerAlias并不受Ubuntu解析FQDN的方式影响(原因暂时不明),因此使用ServerAlias代替ServerName可以有效的越过这一个机制,从而避免此问题发生。


具体的修改方法如下,修改的配置文件并添加ServerAlias,例如本例将:
<VirtualHost *:80>
...
ServerName .me
...
</VirtualHost>

修改为:
<VirtualHost *:80>
...
ServerName example-domain.com
ServerAlias .me
...
</VirtualHost>


重新载入Apache配置即可解决问题。当然具体问题的原因应该和Debian核心有关,之后将继续研究。


本文永久更新地址:http://www.linuxdiyf.com/linux/18992.html