ECcube 使用负载平衡器时无法识别 HTTPS/SSL 时的响应,链接都变成 http
迪丽瓦拉
2024-03-12 18:38:18
0

当 Web 服务器放置在负载平衡器上时,从负载平衡器到 Web 服务器的通信通常使用 HTTP 完成。

这本身没有问题,但即使从浏览器使用https://访问,EC-CUBE也无法原样识别HTTPS通信。

这是因为无法像往常一样获取到判断是否为HTTPS的服务器变量。

如果EC-CUBE无法识别SSL,会出现以下问题。

  1. 所有链接都变成 http://(重定向到 HTTPS 时很难注意到)
  2. 提交表单数据失败
  3. 未能付款
  4. 我无法在安全管理中勾选“强制 SSL”

EC-CUBE4系列用

安装 HTTPS 后,将以下描述添加到 apache 的 httpd.conf。


RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Port} !^443$
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule ^/(.*)?$ https://www.domeinname/$1 [R=301,NE,L]

这将强制 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了。

相关内容