如何配置 httpd 以在同一个 Web 服务器上托管多个网站

如何配置 httpd 以在同一个 Web 服务器上托管多个网站

使用 RHEL7.9、httpd 2.4.6 我的 /var/www/html/ 中有三个站点:/main /site1 /site2

httpd.conf DocumentRoot 指向 /main

Listen 80
ServerName example.com
DocumentRoot "/var/www/html/main"

IncludeOptional conf.d/*.conf

我有以下 .conf 文件:main.conf

<VirtualHost <server ip address>:80>
    DocumentRoot "/var/www/html/main/"
    ServerName example.com
    ServerAlias test.example.com
    <Directory /var/www/html/main>
        Require all granted
    </Directory>
</VirtualHost>

站点1.conf

<VirtualHost <server ip address>:80>
    DocumentRoot "/var/www/html/site1"
    ServerName example.com
    ServerAlias test.example.com
    <Directory /var/www/html/site1>
        Require all granted
    </Directory>
</VirtualHost>

站点2.conf

<VirtualHost <server ip address>:80>
    DocumentRoot "/var/www/html/site2"
    ServerName example.com
    ServerAlias test.example.com
    <Directory /var/www/html/site2>
        Require all granted
    </Directory>
</VirtualHost>

因此基本上,除了 DocumentRoot(指向每个站点的相应目录)之外,所有这三个都共享相同的 Vhost 配置。

当我尝试访问该网站时,我看到的是 /main 的 index.php,但当我导航到 example.com/site1 时,我仍然看到 的main索引页。网站 2 也是如此。

我的配置有什么问题? ServerName 和 ServerAlias 是否应该与每个 VirtualHost 不同?

答案1

在您的配置中,您对所有三个虚拟主机使用了相同的 ServerName 和 ServerAlias,这会导致冲突。Apache HTTP Server 使用与传入请求匹配的第一个 VirtualHost 来确定要服务的文档根目录。

要解决此问题,您需要为每个 VirtualHost 指定唯一的 ServerName 和 ServerAlias 值。例如:

<VirtualHost <server ip address>:80>
DocumentRoot "/var/www/html/main/"
ServerName main.example.com
ServerAlias main.test.example.com
<Directory /var/www/html/main>
Require all granted
</Directory>
</VirtualHost>

站点1.conf

<VirtualHost <server ip address>:80>
DocumentRoot "/var/www/html/site1"
ServerName site1.example.com
ServerAlias site1.test.example.com
<Directory /var/www/html/site1>
Require all granted
</Directory>
</VirtualHost>

站点2.conf

<VirtualHost <server ip address>:80>
DocumentRoot "/var/www/html/site2"
ServerName site2.example.com
ServerAlias site2.test.example.com
<Directory /var/www/html/site2>
Require all granted
</Directory>
</VirtualHost>

进行这些更改后,您需要重新启动 Apache 守护程序。

答案2

简短的回答是是的ServerName必须有所不同,否则客户端如何区分它们?

相关内容