是否有必要为每个站点的 http 和 https 版本设置单独的虚拟主机块?或者有没有什么方法可以避免重复?
答案1
与例如 nginx 中的服务器块不同,它可以同时支持 http和单个服务器块中的 https 定义(每个在不同的端口上)Apache VirtualHost 只有一个切换。
这SSLEngine
指令可以为整个 VirtualHost 打开或关闭 TLS。
(该SSLEngine optional
设置更多的是出于好奇,而不是一个有效的生产选项,它不支持从单个 VirtualHost 块同时支持普通 http 和 https。)
当您尝试使用纯 http 连接到 Apache https IP 地址和端口组合或反之亦然(在纯 http 端口上使用 https 时),您将收到协议错误。
答案2
根据我的测试,似乎有必要为每个端口上的默认虚拟主机设置单独的虚拟主机块,但辅助虚拟主机可以对普通 http 和 https 使用相同的虚拟主机块。
但是,这些辅助虚拟主机必须用明确的端口列表来指定,例如 *:80 *:443,而不仅仅是用普通的通配符。