在 Apache2 虚拟主机中混合 SSL 和非 SSL 内容

在 Apache2 虚拟主机中混合 SSL 和非 SSL 内容

我的一个站点有一个(希望)常见的场景,但我似乎无法弄清楚如何正确部署。

我有 example.com 的以下站点和目录:

这些需要 SSL:

  • /var/www/example.com/admin
  • /var/www/example.com/order

这些必须是非 SSL 的:

  • /var/www/example.com/maps

这些需要支持:

  • /var/www/example.com/css
  • /var/www/example.com/js
  • /var/www/example.com/img

我的 /sites-available/example.com 文件中有两个 example.com 的虚拟主机声明;第一个是 *:443,第二个是 *:80。

因为我有两个 vhost 声明,如果请求来自 443,则使用顶部虚拟主机,如果是端口 80 请求,则使用底部虚拟主机。

但是,我似乎无法使用 SSLRequireSSL 来强制执行我的 SSL 要求,因为我假设对 /admin 或 /order 的端口 80 请求甚至没有到达 *:443 vhost。

我是否应该只拒绝 *:80 虚拟主机内的 /order 和 /admin 所有内容,以便如果您尝试在 80 上请求它,您将收到 403 Forbidden?

答案1

更好的是,自动将其重定向到 ssl(或返回)

在非 SSL 虚拟主机中:

Redirect /admin https://example.com/admin
Redirect /admin https://example.com/order

在 ssl vhost 中(如果您真的希望 /maps 始终是非 ssl,也许是为了节省 CPU?)

Redirect /maps http://example.com/maps

相关内容