神策分析致力于帮助客户搭建开放的数据平台,便于客户更深入的利用数据。本节文档涉及较多技术细节,适用于对相关功能有经验的用户参考。如果对文档内容有疑惑,请咨询神策值班同学获取一对一的协助。

1. 什么时候需要使用 HTTPS 的数据接入

  • 默认情况下,数据接入 API 使用的是 HTTP 协议
  • 若有以下需求,均可以参考本文档配置 HTTPS 数据接入:
    1)希望进一步提高数据传输层的安全性;
    2)需要在 HTTPS 站点上部署神策分析 JavaScript SDK 正常发送数据。

神策建议:在需要通过公网的情况下都使用 HTTPS 协议。

2. 如何配置 HTTPS 的数据接入

不同版本的用户可根据实际情况选择对应的配置方式,如有其它特殊情况请联系神策技术支持。

2.1 云版客户使用 HTTPS 的数据接入方案

2.2 私有部署版客户:

1)在云厂商的负载均衡或者硬件负载设备启用 HTTPS(推荐采用此方式)

2)在独立部署的其它开源应用上配置 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
CODE

它对应的 HTTPS 数据接入地址为,两个地址均可用,选择一种使用即可:

地址一:scheme协议 由 HTTP 改为 HTTPS,端口由 8106 改为 4006。
https://test.cloud.sensorsdata.cn:4006/sa?token=xxx

地址二:使用数据接收专用域名。
https://test.datasink.sensorsdata.cn/sa?token=xxx
CODE

使用数据接收专用 datasink 域名,可以不显式指定端口号,即 443 为数据接收服务端口。

2.2. 私有部署版使用 HTTPS 的数据接入方案

2.2.1. 在云厂商的负载均衡或者硬件负载设备启用 HTTPS

强烈建议采用此方式。

2.2.1.1. 用此方案配置 HTTPS 的注意事项

  • 常见的负载设备均提供 HTTPS 接入功能,可根据实际情况选择不同云厂商的 LB 或硬件负载设备来开启 HTTPS;
  • 使用 HTTPS 加密传输需要提供 SSL 证书,神策不提供任何 SSL 证书。该证书可以通过多种渠道获取,若使用自签证书请确保客户端信任该证书;
  • 使用 HTTPS 请关注证书的过期时间,若证书过期可能会导致数据无法发送成功;
  • 如果是第一次使用云厂商的负载均衡,建议查看各厂商负载均衡配置官方文档,必要时可以给相应厂商提工单询问;
  • 如果依然无法完成转发配置请联系神策技术支持。

云厂商负载均衡配置官方文档参考 :

  •  阿里云:SLB
  •  腾讯云:CLB
  •  亚马逊云:ELB
  •  UCloud:ULB
  •  华为云:ELB

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 "";
  }
}
CODE
# 定义数据接入服务的 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 "";
  }
}
CODE


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;
  }
}
CODE
# 定义神策后台服务的 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;
  }
}
CODE

2.2.2.4. 更新神策后台配置

2.2.2.5. 验证配置是否正确

3. 更新神策后台配置

在配置 HTTPS 完毕之后,神策后台需要知道对应的 HTTPS 地址,所以还需要在神策服务中配置 HTTPS URL,否则会影响部分功能的使用,包括:

  • 埋点代码生成功能
  • 渠道管理功能

假设进行转发配置之后的地址是(以下地址仅为示例,请以自己环境实际的地址为准):

那么更新相关配置的操作方式如下:

注意:以下所有地址均为示例地址,需要根据您真实的数据接收地址进行配置

# 登录到任意一台神策服务节点并切换到神策管理账号
su - sa_cluster
# 更新 HTTPS 数据接入服务地址
edgeadmin data_sink set -n secure_data_sink_url -v 'https://10.129.31.36:8106'
# 更新 HTTPS 后台分析服务地址
sbpadmin business_config -a set -p sa -n web -k web_url -v https://web.cloud.sensorsdata.cn/
# 重启服务
aradmin restart -m web -p sa

BASH


检查相关配置的操作方式如下:

# 登录到任意一台神策服务节点并切换到神策管理账号
su - sa_cluster
# 检查 HTTPS 数据接入服务地址
edgeadmin data_sink get -n secure_data_sink_url
# 检查 HTTPS 后台分析服务地址
sbpadmin business_config -a get -p sa -n web -k web_url
BASH


# 登录到任意一台神策服务节点并切换到神策管理账号
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
BASH


检查相关配置的操作方式如下:

# 登录到任意一台神策服务节点并切换到神策管理账号
su - sa_cluster
# 检查 HTTPS 数据接入服务地址
spadmin config get global -n secure_data_sink_url
# 检查 HTTPS 后台分析服务地址
spadmin config get global -n secure_web_url
BASH



4. 如何验证配置是否正确

  • 获取 HTTPS 数据接入地址(转发到 8106 端口的 HTTPS 地址)加 /debug (例如:

    https://datasink.cloud.sensorsdata.cn/debug),直接在浏览器中访问,如返回“Sensors Analytics is ready to receive your data!” ,证明该地址配置正确。

  • 在浏览器中直接访问 HTTPS 后台分析地址(转发到 8107 端口的 HTTPS 地址),如果能正常返回神策登录的界面,证明该地址配置正确。