我可以在Apache conf的同一VirtualHost中定义HTTP和HTTPS吗?


13

我有一个很大的VirtualHost定义,我不想重复它,因此该站点也可以通过HTTPS运行。

这是我想做的:

<VirtualHost *>
    ServerName example.com

    <If port=443>
        SSLEngine on
        SSLCertificateFile ...
        SSLCertificateKeyFile ...
        SSLCertificateChainFile ...
    </If>

    (other config)

</VirtualHost>

有什么办法可以做到这一点?
我是否缺少不重复配置的其他方法?

Answers:


12

Apache(2.2)的当前稳定版本不具有该功能,但是2.4确实具有IF指令

您现在必须创建两个VirtualHosts,但是您可以通过环境或apache全局变量设置一些内容,并在您的virtualhost配置中使用它(例如,设置documentroot)。这样,如果您要更改,只需一行修改即可完成。

当然,您可以使用include来执行以下操作:

<VirtualHost *:80>
        include /etc/apache2/vhost.conf.d/site1
</VirtualHost>

<VirtualHost *:443>
        include /etc/apache2/vhost.conf.d/site1
        include /etc/apache2/vhost.conf.d/site1-ssl
</VirtualHost>

ps:SNI将是IPv6适应之前的主流年份。假设您使用的是受支持的操作系统,那么所有主流浏览器都已支持它。

编辑:愚蠢发现您不能将SSLEngine放在If块上,所以我的答案是错误的。


8
试图把SSLEngine On<If>将给予SSLEngine not allowed here,所以建议用例在这个答案的开始可悲的是没有出现成为可能。这似乎是因为“在此配置部分中只能使用支持目录上下文的指令”的要求。(ref)并且SSLEngineserver config, virtual host (ref),不是目录。
愚蠢的2014年

3

不能。您可以将大多数内容移到Global配置并在VirtualHost中继承它。


1
不幸的是,我有一些虚拟主机,每个虚拟主机具有不同的配置,并且大多数都需要通过HTTP和HTTPS进行工作。
杰克

1
尽管这个答案没有帮助,但它是唯一正确的答案。请移至不会阻塞的Web服务器。:)
intgr


2

对于SSL虚拟主机,您必须使用第二个端口ala

<VirtualHost *:443>
    ServerName abc.com
</VirtualHost>
<VirtualHost *:4443>
    Servername def.com
</VirtualHost>

否则您必须使用单独的IP

<VirtualHost 192.168.0.1:443>
    ServerName abc.com
</VirtualHost>
<VirtualHost 192.168.0.2:443>
    Servername def.com
</VirtualHost>

Apache SSL文档http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html中确实有很好的解释

向下搜索“为什么不能将SSL与基于名称/基于非IP的虚拟主机一起使用?”



具有讽刺意味的是,当SNI被广泛接受并可以安全地用于大多数虚拟主机站点时,IPv6可能已经足够普遍以至于与它无关。
jgoldschrafe 2010年

4
@jgoldschrafe大家好,2010年在这里发言!最近的犬类事件表明,非SNI浏览器在全球范围内的使用率不到 2%。从第一世界开始,它可能要少得多。IPv4仍然有效:)
kubanczyk 2015年

2
@kubanczyk有我!:)
jgoldschrafe 2015年

@jgoldschrafe即使使用IPv6,我仍然会优先考虑SNI,而不是将地址块分配给单个计算机,因为IP主要用于路由,并且更易于管理。
巴绍(Bachsau)
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.