我正在尝试在两个端口 80 和 443 上运行具有一个服务器名称的单个 Web 服务器。如果网站的某些区域未在端口 443 上使用 ssl,则应该禁止访问该网站。
网络服务器上的当前实现使用虚拟服务器来区分 443 和 80。我想知道虚拟服务器在这个环境中是否有意义,我找不到任何人谈论只有一个服务器名称的虚拟服务器。
在基于 IP 的虚拟服务器下这有意义吗?因为它只有一个 IP 地址。
感谢 Nachum 对此的阐释
答案1
对 http 和 https 使用不同的 VirtualHost(我相信这是您描述当前设置时的意思)是很常见的。
要强制执行 https,您可以使用 mod_rewrite:
RewriteEngine On
RewriteRule ^(.*) https://yourserver.com$1 [R,L]
当然可以修改为仅适用于某些 URL:
RewriteEngine On
RewriteRule ^/secure-area(.*) https://yourserver.com/secure-area$1 [R,L]
这些应该放在您的:80 VirtualHost(http)中以防止重定向循环。
或者,您也可以使用 RewriteCond 条件将规则限制为非 https 流量:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/secure-area(.*) https://yourserver.com/secure-area$1 [R,L]
答案2
您仍然需要<VirtualHost>
为不同的端口定义两个不同的块,因为 SSL 指令需要存在于端口 443 中,而不需要存在于端口 80 中。
听起来您的 80 和 443 配置之间似乎存在一些额外的差异,因为增加了访问控制 - 您能否解释一下您<VirtualHost>
对两个不同的监听端口在两个不同的块中进行配置的担心?