当 Web 服务器放置在负载平衡器上时,从负载平衡器到 Web 服务器的通信通常使用 HTTP 完成。
这本身没有问题,但即使从浏览器使用https://访问,EC-CUBE也无法原样识别HTTPS通信。
这是因为无法像往常一样获取到判断是否为HTTPS的服务器变量。
如果EC-CUBE无法识别SSL,会出现以下问题。
安装 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了。