Apache Vhostが動作しない

Apache Vhostが動作しない

同じサーバーを参照するドメインがいくつかあります。各ドメインに Vhost を作成したいと考えています。これは一部のドメインではすでに機能していますが、すべてのドメインで機能しているわけではありません。

例: ドメイン「b.com」に移動して、「a.com」に表示されるはずの Web サイトを取得します。ただし、「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>

2番目の構成:

<VirtualHost b.com:80>
  Servername b.com
  DocumentRoot /var/www/b.com
</VirtualHost>

よろしくお願いします!

答え1

パラメータは<VirtualHost ...>ウェブサーバーにローカルIPアドレスバインドする名前を指定します。名前を指定しても、IP アドレスの解決にのみ使用されます。(たとえば、サーバーに多数の IP アドレスがあり、各ドメインに専用の IP アドレスがある場合に使用されます。)

ほとんどの vhost は、アドレスベースではなく名前ベースであるため、このパラメータは役に立たず、代わりにワイルドカード アドレスを指定する必要があります*。代わりに、Apache Web サーバーは、vhost をパラメータによって区別し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

関連情報