我有多个引用同一台服务器的域。现在我想为每个域创建一个 Vhost。这已经适用于某些域,但并非适用于所有域。
示例:我导航到域“b.com”,并获取应显示为“a.com”的网站。但是,对于“a.com”,一切正常。来自“b.com”的请求也保存在来自“a.com”的日志中,并且它还表明我已导航到“a.com”。
DNS 管理在 Cloudflare。每个域都有一个包含其域名的 TXT 记录。
你能帮助我吗?
我已将配置缩减到最低限度。这就是 2 个文件。
第一个配置:
<VirtualHost a.com:80>
Servername a.com
DocumentRoot /var/www/a.com
</VirtualHost>
第二个配置:
<VirtualHost b.com:80>
Servername b.com
DocumentRoot /var/www/b.com
</VirtualHost>
先感谢您!
答案1
的参数<VirtualHost ...>
告诉 Web 服务器哪个本地 IP 地址绑定到。即使指定名称,也仅用于解析 IP 地址。(例如,当服务器有多个 IP 地址且每个域都有专用 IP 地址时使用它。)
大多数虚拟主机都是基于名称的,而不是基于地址的,因此此参数毫无用处,您只需指定通配符地址即可*
。相反,Apache Web 服务器通过其ServerName
和ServerAlias
参数来区分虚拟主机。
标准基于名称的虚拟主机配置如下:
<VirtualHost *:80>
ServerName a.example.tld
DocumentRoot /var/www/a
</VirtualHost>
<VirtualHost *:443>
ServerName a.example.tld
DocumentRoot /var/www/a
SSLEngine On
SSLCertificateFile [...]
</VirtualHost>
---
<VirtualHost *:80>
ServerName b.example.tld
DocumentRoot /var/www/b
</VirtualHost>
<VirtualHost *:443>
ServerName b.example.tld
DocumentRoot /var/www/b
SSLEngine On
SSLCertificateFile [...]
</VirtualHost>
如果服务器应该同时提供 HTTP 和 HTTPS,那么您仍然需要为每个端口(:80 和 :443)定义 vhost。是否需要这个可能取决于您的 Cloudflare 配置。
如果你正在使用老的Apache 版本(例如 v2.2 或更早版本)还需要这些选项(它们在 v2.4 或更新版本中不再存在):
NameVirtualHost *:80
NameVirtualHost *:443