Apache Vhost 无法工作

Apache Vhost 无法工作

我有多个引用同一台服务器的域。现在我想为每个域创建一个 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 服务器通过其ServerNameServerAlias参数来区分虚拟主机。

标准基于名称的虚拟主机配置如下:

<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

相关内容