我想在我的开发机器上拥有 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
块内定义,例如使用ServerName
或ServerAlias
。
在VirtualHost
指令中,您可以声明您希望虚拟主机监听的 IP 地址以及端口:
<VirtualHost 127.0.0.1:80>
此虚拟主机定义仅在客户端(大多数情况下为 Web 浏览器)连接到端口 80 上的 IP 127.0.0.1 时才适用。由于 127.0.0.1(几乎在所有情况下)都是内部环回设备,因此只能从服务器本身访问此虚拟主机。当然,在公共服务器上,您更愿意使用公共 IP 地址。
如果您想将虚拟主机定义应用于任何 IP(在网络级别到达服务器),您可以使用通配符*
,例如:
<VirtualHost *:80>