当同一端口有多个站点时,Apache 如何知道要加载哪个站点?

当同一端口有多个站点时,Apache 如何知道要加载哪个站点?

我在本地主机上设置了 2 个站点。一个位于 localhost:8197,另一个位于 fc.localhost:8197 当然,为了使其正常工作,我编辑了 /etc/hosts 文件以包含

fc.localhost    127.0.0.1

因此,这些分别是我针对每个站点的配置:

000-default.conf(站点位于本地主机):

<VirtualHost *:8197>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Directory /var/www/html/>
        Options +Indexes +FollowSymLinks +ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

fc.conf(站点位于fc.localhost):

<VirtualHost *:8197>
    ServerAdmin webmaster@localhost
    DocumentRoot /home/alex/Documents/fc/Website/fc/html
    ServerName fc.localhost
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Directory /home/alex/Documents/fc/Website/fc/html>
        Options +Indexes +FollowSymLinks +ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
</VirtualHost>

假设我的本地 IP 地址是 10.8.210.51,本地网络中的某台 PC 在浏览器的地址栏中输入 10.8.210.51:8197,那么我这边的 apache 将为第一个站点 (localhost) 提供服务,而不会为第二个站点 (fc.localhost) 提供服务。如果我在地址栏 (服务器端) 中输入 127.0.0.1:8197,也会发生同样的事情。

因此,我的问题是,出于明确的兴趣,Apache 如何决定为哪个站点提供服务以及我如何改变这种行为?

答案1

针对您的具体情况,简短的回答是:apache 将为第一个重叠的虚拟主机提供服务。由于 000-default 在字母表中位于 fc.localhost 之前,因此将加载并提供服务。

回答我认为的后续问题:你可以使用以下方式在同一个 IP:PORT 上托管多个网站命名虚拟主机

该技术依赖于主机头在 HTTP 规范中。

由于 SSL 的复杂性,https 虚拟主机可以通过服务器名称指示

答案2

这称为“基于名称的虚拟主机”,描述这里

相关内容