web-dev-qa-db-ja.com

ポート80と443のVirtualhostディレクティブを複製する必要がありますか?

<VirtualHost>ディレクティブの長く複雑なリストがあり、SSLを使用しているため、それらをポート80と443の個別の<VirtualHost>グループに複製する必要があります。 mod_rewriteルールを更新するたびに、両方の場所で実行することを忘れないでください。さもないと、アプリが壊れてしまいます。この重複はトラブルを引き起こしています。これらを組み合わせたりエイリアスしたりする方法はありますか?2つの違いは、ポート443バージョンにSSLEngine、SSLCertificateFileなどが含まれていることだけです。

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

また、.htaccessファイルを使用できません。

58
scotts

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>  
49
sfossen

1つのVirtualhostディレクティブで任意の数のホストとポートを使用できます。

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

私の場合、私は使用しました。

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

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

</VirtualHost>
34
Sampath Perera

このような古い投稿を見つけてすみませんが、他のGoogle社員を支援するために、対処方法を共有したいと思いました。

ローカルホストにいくつかの仮想ホストがあります。たとえば、localhostfoo.combar.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>
8
RemyNL

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構成ファイル全体で多くの重複を保存できます。

詳細はこちらをご覧ください:

https://httpd.Apache.org/docs/2.4/mod/mod_macro.html

3
Seb

共通の構成を別のファイルに入れて、両方の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>
2
sme

コンテナ内ではなく、コンテナ内で共通のディレクティブを指定することもできます。主にサーバーレベルではなくディレクトリレベルでmod_rewriteルールを好むため、これが私が行うことですが、それはあなたにとっても同様にうまくいくはずです。

0
Matt Jacob