<VirtualHost>ディレクティブの長く複雑なリストがあり、SSLを使用しているため、それらをポート80と443の個別の<VirtualHost>グループに複製する必要があります。 mod_rewriteルールを更新するたびに、両方の場所で実行することを忘れないでください。さもないと、アプリが壊れてしまいます。この重複はトラブルを引き起こしています。これらを組み合わせたりエイリアスしたりする方法はありますか?2つの違いは、ポート443バージョンにSSLEngine、SSLCertificateFileなどが含まれていることだけです。
私の<Virtualhost>には、多くのmod_rewriteルール、LocationMatchルール、CGIディレクティブなどが含まれています。
また、.htaccessファイルを使用できません。
1つのVirtualhostディレクティブで任意の数のホストとポートを使用できます。
<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>
私の場合、私は使用しました。
<VirtualHost *:80 *:443>
ServerName loop.lk
....
SSLEngine on
SSLCertificateFile /etc/Apache2/ssl/local.crt
</VirtualHost>
このような古い投稿を見つけてすみませんが、他のGoogle社員を支援するために、対処方法を共有したいと思いました。
ローカルホストにいくつかの仮想ホストがあります。たとえば、localhost
、foo.com
、bar.com
これは私のラップトップ(macosx)のローカルホストサイトであるため、自己署名証明書を回避できるため、ssl-partはすべてのvhostsで同じです...
私がしたことはこれです:
ディレクトリ/etc/Apache2/extra/vhosts/
を作成しました。
/etc/Apache2/extra/vhosts/localhost.conf
を作成しました:
ServerName localhost
DocumentRoot "/www/localhost"
<Directory /www/localhost>
Require all granted
</Directory>
ErrorLog "/var/log/Apache2/localhost.error_log"
CustomLog "/var/log/Apache2/localhost.access_log" common
/etc/Apache2/extra/vhosts/foo.conf
:
ServerName foo.com
DocumentRoot "/www/foo.com"
<Directory /www/foo.com>
Require all granted
</Directory>
ErrorLog "/var/log/Apache2/foo.com.error_log"
CustomLog "/var/log/Apache2/foo.com.access_log" common
/etc/Apache2/extra/vhosts/bar.conf
:
ServerName bar.com
DocumentRoot "/www/bar.com"
<Directory /www/bar.com>
Require all granted
</Directory>
ErrorLog "/var/log/Apache2/bar.com.error_log"
CustomLog "/var/log/Apache2/bar.com.access_log" common
そして最後に/etc/Apache2/extra/vhosts/ssl.conf
:
SSLEngine on
SSLCertificateFile "/etc/Apache2/ssl/server.crt"
SSLCertificateKeyFile "/etc/Apache2/ssl/server.key"
そして、私の/etc/Apache2/extra/httpd-vhosts.conf
:
<VirtualHost *:80>
Include /etc/Apache2/extra/vhosts/localhost.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/Apache2/extra/vhosts/localhost.conf
Include /etc/Apache2/extra/vhosts/ssl.conf
</VirtualHost>
<VirtualHost *:80>
Include /etc/Apache2/extra/vhosts/foo.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/Apache2/extra/vhosts/foo.conf
Include /etc/Apache2/extra/vhosts/ssl.conf
</VirtualHost>
<VirtualHost *:80>
Include /etc/Apache2/extra/vhosts/bar.conf
</VirtualHost>
<VirtualHost *:443>
Include /etc/Apache2/extra/vhosts/bar.conf
Include /etc/Apache2/extra/vhosts/ssl.conf
</VirtualHost>
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>
マクロはパラメータを取ることもでき、含まれる他のファイルで定義できます。したがって、Functionsのように少し使用して、Apache構成ファイル全体で多くの重複を保存できます。
詳細はこちらをご覧ください:
共通の構成を別のファイルに入れて、両方のVirtualHostセグメントに含めることができます。例えば:
<VirtualHost 192.168.1.2:80>
Include conf/common.conf
</VirtualHost>
<VirtualHost 192.168.1.2:443>
Include conf/common.conf
(put your ssl specific cofiguration stuff here ...)
</VirtualHost>
コンテナ内ではなく、コンテナ内で共通のディレクティブを指定することもできます。主にサーバーレベルではなくディレクトリレベルでmod_rewriteルールを好むため、これが私が行うことですが、それはあなたにとっても同様にうまくいくはずです。