如何使用 Apache2 拥有多个站点?

如何使用 Apache2 拥有多个站点?

我想在我的开发机器上拥有 2 个站点。

我编辑了 /etc/hosts 如下

127.0.0.1       restaurant.local    www.restaurant.local
127.0.0.1   lrv4.local      www.lrv4.local

我创建了两个新文件 /etc/apache2/sites-available/restaurant.local 和 ../lrv4.local

<VirtualHost restaurant.local:80>
    ServerName restaurant.local
    ServerAlias www.restaurant.local
    DocumentRoot /var/www/restaurant/public
    <Directory /var/www/restaurant/public/>
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    CustomLog /var/log/apache2/restaurant.local-access.log combined
</VirtualHost>

<VirtualHost lrv4.local:80>
    ServerName lrv4.local
    ServerAlias www.lrv4.local
    DocumentRoot /var/www/lrv4/public
    <Directory /var/www/lrv4/public/>
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    CustomLog /var/log/apache2/lrv4.local-access.log combined
</VirtualHost>

这两个文件彼此比较相似。

我使用以下方式启用了这两个网站

sudo a2ensites restaurant.local
sudo a2ensites lrv4.local

我还使用以下方式检查已启用的网站

ls /etc/apache2/sites-enabled

我的问题是,当我尝试访问 lrv4.local 时,我发现该页面属于 restaurant.local,我尝试检查上面的 VirtualHost 配置文件中声明的日志文件,所有日志都记录到 /var/log/apache2/restaurant.local-access.log 中,没有任何日志记录到 /var/log/apache2/lrv4.local-access.log 中。

请帮忙。

答案1

在阅读了一些内容后,编辑了我的答案Apache 文档: 从技术上来说,你声明一个域VirtualHost,但它不鼓励因为它可以有DNS 带来的意外影响。我假设这是在你的配置上发生的。


在您的 Apache 配置中,您使用VirtualHost指令的方式可能有问题。您在其中声明了域名,例如<VirtualHost restaurant.local>。但不建议这样做,而应声明服务器的 IP 地址。域名在VirtualHost块内定义,例如使用ServerNameServerAlias

VirtualHost指令中,您可以声明您希望虚拟主机监听的 IP 地址以及端口:

<VirtualHost 127.0.0.1:80>

此虚拟主机定义仅在客户端(大多数情况下为 Web 浏览器)连接到端口 80 上的 IP 127.0.0.1 时才适用。由于 127.0.0.1(几乎在所有情况下)都是内部环回设备,因此只能从服务器本身访问此虚拟主机。当然,在公共服务器上,您更愿意使用公共 IP 地址。

如果您想将虚拟主机定义应用于任何 IP(在网络级别到达服务器),您可以使用通配符*,例如:

<VirtualHost *:80>

相关内容