私は、ポート80と443のためのVirtualHostディレクティブを複製する必要がありますか?
-
21-08-2019 - |
質問
私は
私の
また、私は.htaccessファイルを使用することはできません。
解決
他のヒント
あなたは、単一のVirtualHostディレクティブ内のホストとポートのいずれか#を使用することができます。
<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>
私の場合、私が使用しています。
<VirtualHost *:80 *:443>
ServerName loop.lk
....
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/local.crt
</VirtualHost>
このような古いポストをつり上げるために申し訳ありませんが、そこから他のGooglerを支援するために、私はそれに対処する方法共有したいと思っます:
私は、私のローカルホスト上のバーチャルホストのカップルを持っていると言う:localhost
、foo.com
、bar.com
これは...私は、自己署名証明書を使用して逃げることができ、したがって、SSL-部分は、すべてのバーチャルホストで同じである私のラップトップ上のlocalhostのサイト(MacOSXの)であること。
私がやったことはこれです:
私は、ディレクトリ/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
を使用しています。
最初のマクロモジュールを有効にする
a2enmod macro
次に、マクロで共有のものを入れて、あなたの仮想ホストからそれをuse
ます:
<Macro SharedStuff>
ServerName example.com
ServerAdmin example@example.com
<DocumentRoot /var/www/example>
...
</DocumentRoot>
</Macro>
<VirtualHost *:80>
Use SharedStuff
</VirtualHost>
<VirtualHost *:443>
Use SharedStuff
SSLEngine On
SSLProtocol All -SSLv2 -SSLv3
...
</VirtualHost>
マクロもパラメータを取ることができ、および含まれている他のファイルで定義されています。あなたは少しの機能のようにそれらを使用して、あなたの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ルールを好む主な理由は、私は何をすべきかだが、それはあまりにもあなたのためにも同様に動作する必要があります。