具有绑定 DNS 的 Apache 虚拟站点未重定向到文档根目录

具有绑定 DNS 的 Apache 虚拟站点未重定向到文档根目录

我这里有一个有点复杂的问题。

我见过许多论坛讨论如何为 LAN 设置 Bind 以及如何设置 Apache2 以允许托管多个站点。但通常 Bind 教程都是针对单区域设置的,而虚拟站点教程最终会编辑 hosts 文件以在 LAN 内进行主机名解析。

但我想在一个 Web 服务器上托管多个站点,并将主机解析外包给名称服务器。在这种情况下,所有操作都在 VirtualBox 内部完成,使用 pfSense 的虚拟实例为虚拟子网提供虚拟路由和防火墙。Bind DNS 服务器和 LAMP Web 服务器都是 Ubuntu 16.04.1 VM。两者都安装了 Webmin 以帮助维护和保养。

Bind 需要一些工作来设置,但它将我的 www.fqdn2.com 重定向到 www.fqdn1.com 上的正确服务器。所有 nslookups 和 ping 主机名均有效。

当我输入 www.fqdn2.com 时,它会带我进入网络服务器。但是,我在根目录中设置了一个 Hello World 样式的 index.html 文档,即使我输入 www.fqdn2.com/index.html 也看不到它。相反,我得到的是标准全新安装的 Apache 欢迎页面。只有红色和蓝色的 It Works 启动页面。

因此,我猜测问题不是出在 Bind 上,而是出在 Apache 配置文件上。请让我发布您希望查看的任何配置文件,以便查找问题。

<VirtualHost *>
DocumentRoot "/var/www/fqdn2.com"
ServerName fqdn2.com
ServerAlias www.fqdn2.com
<Directory "/var/www/fqdn2.com">
allow from all
Options None
Require all granted
</Directory>
</VirtualHost>

我没有编辑 apache2.conf 文件。

站点配置文件都在那里。

root@www :/etc/apache2/sites-available$ ls
000-default.conf  default-ssl.conf fqdn2.com.conf

当我访问 www.fqdn1.com 时,系统会将我带到 000-default.conf 中默认站点的文档根目录。此文件未经编辑,此页面的到达由 Bind DNS 服务负责。也许我需要手动将 fqdn1.com 添加到 Apache 的虚拟站点列表中并删除 000-default.conf 设置?这里没有服务器名称指令。一切都是默认的。

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

如果我编辑该页面的 html,我会看到它针对 fqdn1.com 进行了更新,但针对 fqdn2.com 却没有更新。这意味着 fqdn2.com 并没有被重定向到 fqdn1.com 的 DocRoot。而且由于该页面的普通版本在 fqdn2.com 的文档根目录中没有副本,我甚至不确定该 html 页面托管在何处。

这里还有一些其他的配置。

user@www:/etc/apache2/sites-enabled$ apache2ctl -S 
VirtualHost configuration: 
:80 www.fqdn1.com (/etc/apache2/sites-enabled/000-default.conf:1) 
*: fqdn2.com (/etc/apache2/sites-enabled/fqdn2.com.conf:1) 
ServerRoot: "/etc/apache2" 
Main DocumentRoot: "/var/www/html" 
Main ErrorLog: "/var/log/apache2/error.log" 
Mutex mpm-accept: using_defaults 
Mutex watchdog-callback: using_defaults
Mutex default: dir="/var/lock/apache2" 
mechanism=fcntl PidFile: "/var/run/apache2/apache2.pid" 
Define: DUMP_VHOSTS 
Define: DUMP_RUN_CFG 
User: name="www-data" id=33 not_used 
Group: name="www-data" id=33 not_used

user@www :/etc/apache2/sites-enabled$ cat fqdn2.com.conf 
<VirtualHost *> DocumentRoot "/var/www/fqdn2.com" 
ServerName fqdn2.com 
ServerAlias www.fqdn2.com
<Directory "/var/www/fqdn2.com"> 
allow from all 
Options None 
Require all granted 
</Directory> 
</VirtualHost> 

user@www:/etc/apache2/sites-available$ cat fqdn2.com.conf 
<VirtualHost *> 
DocumentRoot "/var/www/fqdn2.com" 
ServerName fqdn2.com 
ServerAlias www.fqdn2.com 
<Directory "/var/www/fqdn2.com"> 
allow from all 
Options None 
Require all granted 
</Directory> 
</VirtualHost>

user@www :/etc/apache2/sites-available$ ls 
000-default.conf default-ssl.conf fqdn2.com.conf 

user@www :/etc/apache2/sites-enabled$ ls 
000-default.conf fqdn2.com.conf

任何帮助都将非常有帮助,服务器伙伴。

谢谢。

答案1

同样值得尝试的是改变你的 VirtualHost 语法:

<VirtualHost *:80>
    DocumentRoot "/var/www/fqdn2.com"
    ServerName fqdn2.com
    ServerAlias www.fqdn2.com
    <Directory "/var/www/fqdn2.com">
        Options None
        Require all granted
    </Directory>
</VirtualHost>

这应该有助于确保您的 fqdn2.com vhost 与 apache 附带的默认 NameVirtualHost *:80 配置相匹配,并且可能解决您的问题。

我不认为 DNS 是问题的一部分,但你可以测试一下:

  • 对于 HTTP,telnet 是一种合理的方法:telnet 127.0.0.1 80,然后输入以下内容,并按回车键

GET / HTTP/1.1 Host: fqdn2.com

  • 对于 HTTPS,使用openssl s_client -connect 127.0.0.1:443 -servername fqdn2.com

如果其中任何一个返回了您期望的数据,但是涉及 DNS 查找的请求却没有返回(例如 curl -Lhttp://fqdn2.com),那么 DNS 可能是问题的一部分。

答案2

也许您忘记在 sites-enabled 中放置链接了?

man a2ensite参阅详情。

相关内容