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

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

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

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

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

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

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

2.2 私有部署版客户:

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

2)单机版可以在神策服务的 Nginx 上配置 HTTPS     

3)在独立部署的其它开源应用上配置 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. 在神策服务的 Nginx 上配置 HTTPS

仅单机版可用,一般不建议采用此方式。

对于 单机版 ,这里也提供直接在神策服务的 Nginx 上配置 HTTPS 的方案,注意事项如下;

  • 该方案需要将 SSL 私钥放置于部署神策服务的机器上,且加密算法的选择受限于使用的 Nginx 二进制编译时的 OpenSSL 版本;
  • 使用 HTTPS 加密传输需要提供 SSL 证书,神策不提供任何 SSL 证书。该证书可以通过多种渠道获取,若使用自签证书请确保客户端信任该证书;
  • 使用 HTTPS 请关注证书的过期时间,若证书过期可能会导致数据无法发送成功;
  • HTTPS 的 TLS/SSL 层需要消耗额外 CPU、带宽资源。

在神策服务的 Nginx 上配置 HTTPS 可以参考以下步骤:

  1. 登录部署神策分析机器:

    # 切换到 sa_cluster 用户
    su - sa_cluster
    BASH
  2. 切换到部署 Nginx 的目录:

    cd $SENSORS_ANALYTICS_HOME/nginx
    BASH
  3. 创建证书目录:

    mkdir -p $SENSORS_ANALYTICS_HOME/nginx/cert
    BASH
  4. 将配置好的 SSL 证书公钥和私钥放置到创建的 cert 目录下;

  5. 切换到部署 Nginx 的配置目录:

    Nginx 启动时会加载 conf.d 目录下的所有配置文件,这些配置文件内应该只包含 server 代码块;

    cd $SENSORS_ANALYTICS_HOME/nginx/conf.d
    BASH
  6. 复制模版文件

    cp -a sensors_api_https.conf.default sensors_api_https.conf
    CODE
    模版文件名描述
    sensors_api_https.conf.defaulthttps 协议的数据接入服务转发配置参考模版
    sensors_web_https.conf.defaulthttps 协议的后台分析服务转发配置参考模版
  7. vim 按照配置文件中的注释修改即可

    使用神策 Nginx 进行转发时,端口选择的注意事项

    • 建议数据接入服务、后台分析服务分别对应两个域名;
    • 为避免与已有的神策服务端口冲突,数据接入服务、后台分析服务域名不同的情况下,访问端口建议选择默认端口:http 协议默认端口为 80,https 协议默认端口为 443;
    • 数据接入服务、后台分析服务域名相同的情况下,不同服务需要对应不同端口。选定端口前,请先检查端口是否已被神策服务占用。检查方法:netstat -na |grep 端口号 ,若无结果输出则端口未被占用。
  8. 检查 Nginx 配置,在 Nginx 目录下执行如下命令测试配置是否正确:

    cd $SENSORS_ANALYTICS_HOME/nginx/ 
    sudo sbin/nginx -t
    BASH


    如果出现如下提示说明配置正确:

    nginx: the configuration file ./conf/nginx.conf syntax is ok
    nginx: configuration file ./conf/nginx.conf test is successful

    若有报错请按照报错提示修改后重新检测

  9. 配置测试并检查无误后,在 Nginx 目录下执行如下命令使 Nginx 重新加载配置:

    cd $SENSORS_ANALYTICS_HOME/nginx/ 
    sudo sbin/nginx -s reload
    BASH
  10. 更新神策后台配置

  11. 验证配置是否正确

2.2.3. 在独立部署的其它开源应用上配置 HTTPS

从机器成本和人力成本考虑,如非必要,神策不建议采用此方案。

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

  • 需要额外一台或多台(确保高可用)机器来部署开源负载均衡应用,不能部署在神策的机器上。
  • 请自行规划负载均衡应用所在机器的配置、高可用和监控方案。
  • 使用 HTTPS 加密传输需要提供 SSL 证书,神策不提供任何 SSL 证书。该证书可以通过多种渠道获取,若使用自签证书请确保客户端信任该证书;
  • 使用 HTTPS 请关注证书的过期时间,若证书过期可能会导致数据无法发送成功;
  • 下面的小节将提供基于 Nginx 开启 SSL 的 server 段配置,其它配置段请按实际情况自行配置。若使用其他开源应用可以此作为参考配置。

2.2.3.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.3.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_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_read_timeout 1800s;
proxy_redirect http://sensors_data_web:8107 .;
proxy_pass http://sensors_data_web;
proxy_ignore_client_abort on;
}
}
CODE

2.2.3.4. 更新神策后台配置

2.2.3.5. 验证配置是否正确

3. 更新神策后台配置

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

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

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

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

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

# 登录到任意一台神策服务节点并切换到神策管理账号
su - sa_cluster
# 更新 HTTPS 数据接入服务地址
monitor_tools set_config -t global -n secure_data_sink_url -v "https://datasink.cloud.sensorsdata.cn/"
# 更新 HTTPS 后台分析服务地址
monitor_tools set_config -t global -n secure_web_url -v "https://web.cloud.sensorsdata.cn/"
# 重启服务
sa_admin restart -m web
BASH


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

# 登录到任意一台神策服务节点并切换到神策管理账号
su - sa_cluster
# 检查 HTTPS 数据接入服务地址
monitor_tools get_config -t global -n secure_data_sink_url
# 检查 HTTPS 后台分析服务地址
monitor_tools get_config -t 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 地址),如果能正常返回神策登录的界面,证明该地址配置正确。