UbuntuのApache2では、私のサイトを80でリッスンしていますが、SSLを追加したいと思います。ポート443に対してSSLEngineを有効にして、VirtualHostブロック全体をコピーする必要がないようにする方法はありますか?
私がこれをするとき:
Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
SSLEngine On
... a bunch more lines...
</VirtualHost>
ポート80のSSLEngineをオンにしています。1つのVirtualHostブロックのみを使用し、ポート443のSSLEngineのみをオンにする方法はありますか?だから私はこのようなことをすることができますか?
Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
<IfPort 443>
SSLEngine On
</IfPort>
... a bunch of lines I don't want to copy into another VirutalHost block...
</VirtualHost>
1つのvhostでHTTPとHTTPSの両方を実行することはできません。これらは、別々のプロトコルを処理する別々のvhostだからです。代わりに、すべての共通構成を個別のファイルに入れてから、そのファイルをドメインのSSLおよび非SSLvhostの両方に含める必要があります。
最小限の例:
# /etc/Apache2/sites-available/example.com
<VirtualHost *:80>
Include /etc/Apache2/domains/example.com
</VirtualHost>
<VirtualHost 192.0.2.1:443>
SSLEngine On
SSLCertificateFile /etc/ssl/example.com_crt
SSLCertificateKeyFile /etc/ssh/example.com_key
Include /etc/Apache2/domains/example.com
</VirtualHost>
# /etc/Apache2/domains/example.com
ServerName example.com
ServerAlias www.example.com
ServerAdmin [email protected]
DocumentRoot /home/example/public_html
ErrorLog /home/example/Apache/error.log
Stackoverflowに関する別の質問で述べたように( https://stackoverflow.com/questions/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and- 443/52375167#52375167 ):
Include
を使用する代わりに、Macro
を使用する別のオプションがあります(すべてを1つのファイルに保持できます)。
まず、マクロモジュールを有効にします。
a2enmod macro
次に、共有するものをマクロに入れ、仮想ホストからuse
します。
<Macro SharedStuff>
ServerName example.com
ServerAdmin [email protected]
<DocumentRoot /var/www/example>
...
</DocumentRoot>
</Macro>
<VirtualHost *:80>
Use SharedStuff
</VirtualHost>
<VirtualHost *:443>
Use SharedStuff
SSLEngine On
SSLProtocol All -SSLv2 -SSLv3
...
</VirtualHost>
マクロはパラメーターを取ることもでき、含まれている他のファイルで定義することもできます。そのため、関数のように使用して、Apache構成ファイル全体で多くの重複を保存できます。
詳細については、こちらをご覧ください。
ディレクトリ設定は、<Directory>
ブロックの外側の<VirtualHost>
ブロックに配置できます。これにより、すべての仮想ホストに適用されますが、指定されたパス内にのみ適用されます。