サイトがHTTPSでも実行されるように複製したくないかなり大きなVirtualHost定義を持っています。
これが私がやりたいことです:
<VirtualHost *>
ServerName example.com
<If port=443>
SSLEngine on
SSLCertificateFile ...
SSLCertificateKeyFile ...
SSLCertificateChainFile ...
</If>
(other config)
</VirtualHost>
これを行う方法はありますか?
構成を複製しない他の方法がないのですか?
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が発見したように、SSLEngineをIfブロックに配置できないため、私の答えは間違っています。
いいえ。ほとんどのものをグローバル構成に移動して、VirtualHostに継承できます。
これは別の質問で答えられました。 Includeステートメントを使用します。私にとって魅力のように働きました:
Serve http(ポート80)とhttps(ポート443)on同じVirtualHost
# 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を使用できないのはなぜですか?」を検索します。