当 Web 服务器放置在负载平衡器上时,从负载平衡器到 Web 服务器的通信通常使用 HTTP 完成。
这本身没有问题,但即使从浏览器使用https://访问,EC-CUBE也无法原样识别HTTPS通信。
这是因为无法像往常一样获取到判断是否为HTTPS的服务器变量。
如果EC-CUBE无法识别SSL,会出现以下问题。
- 所有链接都变成 http://(重定向到 HTTPS 时很难注意到)
- 提交表单数据失败
- 未能付款
- 我无法在安全管理中勾选“强制 SSL”
EC-CUBE4系列用
安装 HTTPS 后,将以下描述添加到 apache 的 httpd.conf。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Port} !^443$
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule ^/(.*)?$ https://www.domeinname/$1 [R=301,NE,L]
</IfModule>
这将强制 HTTP 访问 HTTPS。
并在EC-CUBE 的index.php 开头附近添加如下描述。
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
HTTP_X_FORWARDED_PROTO 标头用于标识
客户端在连接到负载均衡器之前选择的协议(HTTP 或 HTTPS) 。
如果使用AWS负载均衡器,
则不会设置HTTPS环境变量,所以
在这里设置,
就可以在EC-CUBE4系统上安全使用HTTPS了。