私は、ポート80と443のためのVirtualHostディレクティブを複製する必要がありますか?

StackOverflow https://stackoverflow.com/questions/679383

  •  21-08-2019
  •  | 
  •  

質問

私はのディレクティブの長くて複雑なリストを持っている、と私はSSLを使用していますので、ポート80と443に別々ののグループにそれらを複製する必要があります。私は私のmod_rewriteルールを更新するたびに、私は両方の場所でそれを行うには覚えているか、他の私は私のアプリを破るよ...この重複はトラブルを求めています。これらを組み合わせたり、エイリアスするが方法です - 両者の唯一の違いは、ポート443バージョンはSSLEngineの、SSLCertificateFileなどが含まれていることです。

私のの多くのmod_rewriteのルール、ルールのLocationMatch、CGIディレクティブ、などが含まれています。

また、私は.htaccessファイルを使用することはできません。

役に立ちましたか?

解決

あなたは共通のルールを含めるようにincludeディレクティブを使用することはできません。 ここ

記事

例:ます。

<VirtualHost _default_:80>
    ...
    include conf/common_rule.conf
</VirtualHost>

<VirtualHost _default_:*>
    ...
    include conf/common_rule.conf
</VirtualHost> 

<VirtualHost _default_:443>
    ... #SSL rules
    include conf/common_rule.conf
</VirtualHost>  

他のヒント

あなたは、単一のVirtualHostディレクティブ内のホストとポートのいずれか#を使用することができます。

<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost> 

私の場合、私が使用しています。

<VirtualHost *:80 *:443>
  ServerName loop.lk

 ....
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/local.crt

</VirtualHost>

このような古いポストをつり上げるために申し訳ありませんが、そこから他のGooglerを支援するために、私はそれに対処する方法共有したいと思っます:

私は、私のローカルホスト上のバーチャルホストのカップルを持っていると言う:localhostfoo.combar.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の設定ファイル間での重複を大幅に節約することができます。

詳細はこちらを参照してください。

https://httpd.apache.org/docs/2.4/mod /mod_macro.htmlする

あなたは別のファイルに共通の構成を入れて、両方の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ルールを好む主な理由は、私は何をすべきかだが、それはあまりにもあなたのためにも同様に動作する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top