web-dev-qa-db-ja.com

SSLを使用するApache2は、VirtualHostブロックをコピーする必要がありますか?

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>
18
dar

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
14
womble

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

詳細については、こちらをご覧ください。

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

1
Seb

ディレクトリ設定は、<Directory>ブロックの外側の<VirtualHost>ブロックに配置できます。これにより、すべての仮想ホストに適用されますが、指定されたパス内にのみ適用されます。

0
DanMan