使用 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
必须有所不同,否则客户端如何区分它们?