Apache 虚拟服务器,用于单个服务器名称

Apache 虚拟服务器,用于单个服务器名称

我正在尝试在两个端口 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>对两个不同的监听端口在两个不同的块中进行配置的担心?

相关内容