带有 SSL 的 Apache2 我必须复制 VirtualHost 块吗?

dar*_*dar 18 mod-ssl apache-2.2

在 ubuntu 上的 Apache2 中,我的站点在 80 上侦听,现在我想添加 SSL。有没有办法为端口 443 启用 SSLEngine,这样我就不必复制整个 VirtualHost 块?

当我这样做时:

Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
  SSLEngine On
  ... a bunch more lines...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

它正在打开端口 80 的 SSLEngine。有没有办法只使用一个 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>
Run Code Online (Sandbox Code Playgroud)

wom*_*ble 14

您不能让一个虚拟主机同时执行 HTTP 和 HTTPS,因为它们是为不同协议提供服务的独立虚拟主机。相反,您应该将所有常见配置放入一个单独的文件中,然后将该文件包含在域的 SSL 和非 SSL 虚拟主机中。

最小的例子:

# /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 webmaster@example.com
DocumentRoot /home/example/public_html
ErrorLog /home/example/apache/error.log
Run Code Online (Sandbox Code Playgroud)