回答:
Apache(2.2)の現在の安定バージョンにはその機能はありませんが、2.4にはIFディレクティブがあります。
現時点では2つのVirtualHostを作成する必要がありますが、環境変数またはApacheグローバル変数を使用していくつかの設定を行い、それを仮想ホスト構成で使用できます(たとえば、ドキュメントルートを設定します)。このように変更したい場合は、1行の変更でそれを行うことができます。
もちろん、includeを使用して次のようなことを行うことができます。
<VirtualHost *:80>
include /etc/apache2/vhost.conf.d/site1
</VirtualHost>
<VirtualHost *:443>
include /etc/apache2/vhost.conf.d/site1
include /etc/apache2/vhost.conf.d/site1-ssl
</VirtualHost>
ps:SNIは、IPv6適応の数年前に主流になります。サポートされているOSを使用していることを前提として、すべてのメインストリームブラウザーが既にサポートしています。
編集:fooquencyが発見したように、あなたはSSLエンジンをIfブロックに置くことができないので、私の答えは間違っています。
これは別の質問で回答されました。Includeステートメントを使用します。私にとって魅力のように働いた:
同じVirtualHostでhttp(ポート80)とhttps(ポート443)を提供する
# Acme Co
<VirtualHost 192.168.56.101:80>
Include /usr/local/apache2/conf/main-acme.conf
</VirtualHost>
###* SSL
<VirtualHost 192.168.56.101:443>
Include /usr/local/apache2/conf/main-acme.conf
SSLEngine On
</VirtualHost>
SSL仮想ホストの場合、2番目のポートalaを使用する必要があります
<VirtualHost *:443>
ServerName abc.com
</VirtualHost>
<VirtualHost *:4443>
Servername def.com
</VirtualHost>
または、個別のIPを使用する必要があります
<VirtualHost 192.168.0.1:443>
ServerName abc.com
</VirtualHost>
<VirtualHost 192.168.0.2:443>
Servername def.com
</VirtualHost>
Apache SSLのドキュメントhttp://httpd.apache.org/docs/2.0/ssl/ssl_faq.htmlに実際に非常に良い説明があります。
「名前ベース/非IPベースの仮想ホストでSSLを使用できないのはなぜですか」を検索します。
SSLEngine On
と、<If>
が返されるSSLEngine not allowed here
ので、この回答の冒頭で提案されているユースケースは、残念ながら可能ではないようです。これは、「ディレクトリコンテキストをサポートするディレクティブのみがこの構成セクション内で使用できる」という要件があるためと思われます。(REF)とSSLEngine
あるserver config, virtual host
(REF)ディレクトリ、ではありません。