使用 HTTPS 的数据接入
|
收藏
神策分析致力于帮助客户搭建开放的数据平台,便于客户更深入的利用数据。本节文档涉及较多技术细节,适用于对相关功能有经验的用户参考。如果对文档内容有疑惑,请咨询神策值班同学获取一对一的协助。
1. 什么时候需要使用 HTTPS 的数据接入
- 默认情况下,数据接入 API 使用的是 HTTP 协议
- 若有以下需求,均可以参考本文档配置 HTTPS 数据接入:
1)希望进一步提高数据传输层的安全性;
2)需要在 HTTPS 站点上部署神策分析 JavaScript SDK 正常发送数据。
神策建议:在需要通过公网的情况下都使用 HTTPS 协议。
2. 如何配置 HTTPS 的数据接入
不同版本的用户可根据实际情况选择对应的配置方式,如有其它特殊情况请联系神策技术支持。
2.2 私有部署版客户:
1)在云厂商的负载均衡或者硬件负载设备启用 HTTPS(推荐采用此方式)
2.1. 云版使用 HTTPS 的数据接入方案
神策分析云版默认已经配置了 HTTPS 数据接入,可直接获取对应的 HTTPS 数据接入地址使用。
2.1.1. 获取 HTTPS 数据接入地址
在神策分析页面获取 HTTPS 数据接入地址,需要使用 管理员 账户:
2.1.2. 云版数据接入地址格式
协议 | 数据接入地址 (域名以实际为准) |
---|---|
HTTP | http://域名:8106/sa?token=xxx |
HTTPS (两种类型的地址均可用,选择一种使用即可) | https://域名:4006/sa?token=xxx |
https://域名+datasink./sa?token=xxx |
示例:
HTTP 数据接入地址为:
http://test.cloud.sensorsdata.cn:8106/sa?token=xxx
它对应的 HTTPS 数据接入地址为,两个地址均可用,选择一种使用即可:
地址一:scheme协议 由 HTTP 改为 HTTPS,端口由 8106 改为 4006。
https://test.cloud.sensorsdata.cn:4006/sa?token=xxx
地址二:使用数据接收专用域名。
https://test.datasink.sensorsdata.cn/sa?token=xxx
使用数据接收专用 datasink 域名,可以不显式指定端口号,即 443 为数据接收服务端口。
2.2. 私有部署版使用 HTTPS 的数据接入方案
2.2.1. 在云厂商的负载均衡或者硬件负载设备启用 HTTPS
强烈建议采用此方式。
2.2.1.1. 用此方案配置 HTTPS 的注意事项
- 常见的负载设备均提供 HTTPS 接入功能,可根据实际情况选择不同云厂商的 LB 或硬件负载设备来开启 HTTPS;
- 使用 HTTPS 加密传输需要提供 SSL 证书,神策不提供任何 SSL 证书。该证书可以通过多种渠道获取,若使用自签证书请确保客户端信任该证书;
- 使用 HTTPS 请关注证书的过期时间,若证书过期可能会导致数据无法发送成功;
- 如果是第一次使用云厂商的负载均衡,建议查看各厂商负载均衡配置官方文档,必要时可以给相应厂商提工单询问;
- 如果依然无法完成转发配置请联系神策技术支持。
云厂商负载均衡配置官方文档参考 :
2.2.1.2. 更新神策后台配置
2.2.1.3. 验证配置是否正确
2.2.2. 在独立部署的其它开源应用上配置 HTTPS
从机器成本和人力成本考虑,如非必要,神策不建议采用此方案。
2.2.2.1. 用此方案配置 HTTPS 的注意事项
- 需要额外一台或多台(确保高可用)机器来部署开源负载均衡应用,不能部署在神策的机器上。
- 请自行规划负载均衡应用所在机器的配置、高可用和监控方案。
- 使用 HTTPS 加密传输需要提供 SSL 证书,神策不提供任何 SSL 证书。该证书可以通过多种渠道获取,若使用自签证书请确保客户端信任该证书;
- 使用 HTTPS 请关注证书的过期时间,若证书过期可能会导致数据无法发送成功;
- 下面的小节将提供基于 Nginx 开启 SSL 的 server 段配置,其它配置段请按实际情况自行配置。若使用其他开源应用可以此作为参考配置。
2.2.2.2. 数据接入服务配置 HTTPS
确认 Nginx 版本
不同版本的 Nginx 开启 SSL 的方式会有差异,需要先确认当前部署的 Nginx 版本。
确认方式可参考:
进入 Nginx 的部署目录下,执行:sbin/nginx -V,查看输出的 "nginx version: "字段,就是对应的 Nginx 版本。
Nginx server 段参考配置如下:
# 定义数据接入服务的 server
# 默认端口 8106。
upstream sensors_data_api {
# 若是单机版,只需要留下一个 server; 若是集群版,需要把 ip 地址改成每个节点的内网地址
server 10.0.0.1:8106; # 这里需要改: 只需把 10.0.0.1 改成对应的ip地址
server 10.0.0.2:8106; # 这里需要改: 只需把 10.0.0.2 改成对应的ip地址
server 10.0.0.3:8106; # 这里需要改: 只需把 10.0.0.3 改成对应的ip地址
# 必须使用 ip_hash 以保证数据接入顺序
ip_hash;
keepalive 100;
}
# 转发数据接入服务
server {
# 转发之后的端口号,可自定义
listen 443;
# 域名,根据实际情况填写
server_name xxx.yyy.zzz;
access_log off;
# 以下配置如果开启 ssl 则需要
ssl on; # 开启 ssl
ssl_certificate /etc/ssl/server.crt; # 配置 ssl 证书信任链,路径以实际为准
ssl_certificate_key /etc/ssl/server.key; # 配置 ssl 私钥,路径以实际为准
# 其他 ssl 参数可以参考 https://mozilla.github.io/server-side-tls/ssl-config-generator/ ,例如:
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
# ssl_prefer_server_ciphers on;
# ssl_session_timeout 5m;
# ssl_session_cache shared:SSL:50m;
# 以上 ssl 配置可视情况添加、修改
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://sensors_data_api;
proxy_ignore_client_abort on;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
# 定义数据接入服务的 server
# 默认端口 8106。
upstream sensors_data_api {
# 若是单机版,只需要留下一个 server; 若是集群版,需要把 ip 地址改成每个节点的内网地址
server 10.0.0.1:8106; # 这里需要改: 只需把 10.0.0.1 改成对应的ip地址
server 10.0.0.2:8106; # 这里需要改: 只需把 10.0.0.2 改成对应的ip地址
server 10.0.0.3:8106; # 这里需要改: 只需把 10.0.0.3 改成对应的ip地址
# 必须使用 ip_hash 以保证数据接入顺序
ip_hash;
keepalive 100;
}
# 转发数据接入服务
server {
# 转发之后的端口号,可自定义
listen 443 ssl; # 开启 ssl
# 域名,根据实际情况填写
server_name xxx.yyy.zzz;
access_log off;
# 以下配置如果开启 ssl 则需要
ssl_certificate /etc/ssl/server.crt; # 配置 ssl 证书信任链,路径以实际为准
ssl_certificate_key /etc/ssl/server.key; # 配置 ssl 私钥,路径以实际为准
# 其他 ssl 参数可以参考 https://mozilla.github.io/server-side-tls/ssl-config-generator/ ,例如:
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
# ssl_prefer_server_ciphers on;
# ssl_session_timeout 5m;
# ssl_session_cache shared:SSL:50m;
# 以上 ssl 配置可视情况添加、修改
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass http://sensors_data_api;
proxy_ignore_client_abort on;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
2.2.2.3. 后台分析服务配置 HTTPS
确认 Nginx 版本
不同版本的 Nginx 开启 SSL 的方式会有差异,需要先确认当前部署的 Nginx 版本。确认方式可参考:
进入 Nginx 的部署目录下,执行:sbin/nginx -V,查看输出的 "nginx version: "字段,就是对应的 Nginx 版本。
Nginx server 段参考配置如下:
# 定义神策后台服务的 server
# 默认端口是 8107
upstream sensors_data_web {
# 若是单机版,只需要留下一个 server ,若是集群版,需要把 ip 地址改成没个节点的内网地址
server 10.0.0.1:8107; # 这里需要改: 只需把 10.0.0.1 改成对应的ip地址
server 10.0.0.2:8107; # 这里需要改: 只需把 10.0.0.2 改成对应的ip地址
server 10.0.0.3:8107; # 这里需要改: 只需把 10.0.0.3 改成对应的ip地址
ip_hash;
}
# 转发神策后台界面
server {
# 端口号,可自定义
listen 443;
# 域名,根据实际情况填写
server_name xxx.yyy.zzz;
access_log off;
# 以下配置如果开启 ssl 则需要
ssl on; # 开启 ssl
ssl_certificate /etc/ssl/server.crt; # 配置 ssl 证书信任链,路径以实际为准
ssl_certificate_key /etc/ssl/server.key; # 配置 ssl 私钥,路径以实际为准
# 其他 ssl 参数可以参考 https://mozilla.github.io/server-side-tls/ssl-config-generator/ ,例如:
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
# ssl_prefer_server_ciphers on;
# ssl_session_timeout 5m;
# ssl_session_cache shared:SSL:50m;
# 以上 ssl 配置可视情况添加、修改
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_read_timeout 1800s;
proxy_redirect http://sensors_data_web:8107 .;
proxy_pass http://sensors_data_web;
proxy_ignore_client_abort on;
}
}
# 定义神策后台服务的 server
# 默认端口是 8107
upstream sensors_data_web {
# 若是单机版,只需要留下一个 server ,若是集群版,需要把 ip 地址改成没个节点的内网地址
server 10.0.0.1:8107; # 这里需要改: 只需把 10.0.0.1 改成对应的ip地址
server 10.0.0.2:8107; # 这里需要改: 只需把 10.0.0.2 改成对应的ip地址
server 10.0.0.3:8107; # 这里需要改: 只需把 10.0.0.3 改成对应的ip地址
ip_hash;
}
# 转发神策后台界面
server {
# 端口号,可自定义
listen 443 ssl; # 开启 ssl
# 域名,根据实际情况填写
server_name xxx.yyy.zzz;
access_log off;
# 以下配置如果开启 ssl 则需要
ssl_certificate /etc/ssl/server.crt; # 配置 ssl 证书信任链,路径以实际为准
ssl_certificate_key /etc/ssl/server.key; # 配置 ssl 私钥,路径以实际为准
# 其他 ssl 参数可以参考 https://mozilla.github.io/server-side-tls/ssl-config-generator/ ,例如:
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
# ssl_prefer_server_ciphers on;
# ssl_session_timeout 5m;
# ssl_session_cache shared:SSL:50m;
# 以上 ssl 配置可视情况添加、修改
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_read_timeout 1800s;
proxy_redirect http://sensors_data_web:8107 .;
proxy_pass http://sensors_data_web;
proxy_ignore_client_abort on;
}
}
2.2.2.4. 更新神策后台配置
2.2.2.5. 验证配置是否正确
3. 更新神策后台配置
在配置 HTTPS 完毕之后,神策后台需要知道对应的 HTTPS 地址,所以还需要在神策服务中配置 HTTPS URL,否则会影响部分功能的使用,包括:
- 埋点代码生成功能
- 渠道管理功能
假设进行转发配置之后的地址是(以下地址仅为示例,请以自己环境实际的地址为准):
那么更新相关配置的操作方式如下:
注意:以下所有地址均为示例地址,需要根据您真实的数据接收地址进行配置
# 登录到任意一台神策服务节点并切换到神策管理账号
su - sa_cluster
# 更新 HTTPS 数据接入服务地址
spadmin config set global -n secure_data_sink_url -v "https://datasink.cloud.sensorsdata.cn/"
# 更新 HTTPS 后台分析服务地址
spadmin config set global -n secure_web_url -v "https://web.cloud.sensorsdata.cn/"
# 重启服务
spadmin restart -m web -p sa
检查相关配置的操作方式如下:
# 登录到任意一台神策服务节点并切换到神策管理账号
su - sa_cluster
# 检查 HTTPS 数据接入服务地址
spadmin config get global -n secure_data_sink_url
# 检查 HTTPS 后台分析服务地址
spadmin config get global -n secure_web_url
4. 如何验证配置是否正确
- 获取 HTTPS 数据接入地址(转发到 8106 端口的 HTTPS 地址)加 /debug (例如:
https://datasink.cloud.sensorsdata.cn/debug),直接在浏览器中访问,如返回“Sensors Analytics is ready to receive your data!” ,证明该地址配置正确。
- 在浏览器中直接访问 HTTPS 后台分析地址(转发到 8107 端口的 HTTPS 地址),如果能正常返回神策登录的界面,证明该地址配置正确。
注:本文档内容为神策产品使用和技术细节说明文档,不包含适销类条款;具体企业采购产品和技术服务内容,以商业采购合同为准。