web-dev-qa-db-ja.com

Apache confの同じVirtualHostでHTTPとHTTPSを定義できますか?

サイトがHTTPSでも実行されるように複製したくないかなり大きなVirtualHost定義を持っています。

これが私がやりたいことです:

<VirtualHost *>
    ServerName example.com

    <If port=443>
        SSLEngine on
        SSLCertificateFile ...
        SSLCertificateKeyFile ...
        SSLCertificateChainFile ...
    </If>

    (other config)

</VirtualHost>

これを行う方法はありますか?
構成を複製しない他の方法がないのですか?

13
Jake

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ブロックに配置できないため、私の答えは間違っています。

12
Tyrael

いいえ。ほとんどのものをグローバル構成に移動して、VirtualHostに継承できます。

3
Chris S

これは別の質問で答えられました。 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>
3
Kevin Parker

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を使用できないのはなぜですか?」を検索します。

2
Paul S