同じサーバーを参照するドメインがいくつかあります。各ドメインに 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