我的一个站点有一个(希望)常见的场景,但我似乎无法弄清楚如何正确部署。
我有 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