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


18

在ubuntu上的Apache2中,我的站点监听80,现在我想添加SSL。有没有一种方法可以为端口443启用SSLEngine,所以我不必复制整个VirtualHost块?

当我这样做时:

Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
  SSLEngine On
  ... a bunch more lines...
</VirtualHost>

它正在为端口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>

Answers:


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

您能举一个简短的例子说明文件的外观吗?它需要VirtualHost包装器吗?还是我应该将所有行都移到其中而不使用任何包装器?
dar

1
我在答案中添加了一个示例。
womble

1

正如我在关于stackoverflow的另一个问题(/programming/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and-443/52375167# 52375167):

替代使用的另一种选择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


0

您可以将目录设置放在<Directory>任何<VirtualHost>块之外的块中。这会将它们应用于所有虚拟主机,但仅在指定路径内。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.