服务转发配置
最后更新于:2018-08-14 15:15:02
神策分析致力于帮助客户搭建开放的数据平台,便于客户更深入的利用数据。本节文档涉及较多技术细节,适用于对相关功能有经验的用户参考。如果对文档内容有疑惑,请咨询您的数据咨询顾问获取一对一的协助。
当神策分析处于私有部署的模式时,用户出于安全、负载均衡等方面的考虑,通常会需要把神策分析的对外访问地址进行二次转发,以符合运维方面的要求。
1. 什么时候需要进行转发配置
- 当部署神策分析集群版时,必须进行转发配置,以保证数据接入服务的性能和可靠性。
- 当部署神策分析单机版时,如果希望修改接入数据的端口,或者开启 https,那么也可以使用转发配置来实现。
2. 如何进行转发配置
神策分析对外的 Web 服务分为两部分:
- 数据接入服务。用于接收各个 SDK 发送过来的数据,通常情况下都需要允许公网访问(如果不使用任何客户端的 SDK 也可以禁止公网访问),且需要考虑流量和带宽的影响。该服务的默认端口为 8106。
- 后台分析服务。用于进行数据分析、管理的后台界面,通常情况下可以只允许办公网访问,以便最大限度的保证系统的安全性。该服务的默认端口为 8107。
下面分别介绍一下使用 Nginx、阿里云 SLB、UCloud ULB、AWS ELB 等几种不同的情况下的参考配置,如果有其它特殊情况请联系神策技术支持。
2.1 使用 Nginx 进行服务转发
注意事项:
- 开启 HTTPS 需要额外配置证书,且会对性能有明显影响,注意评估接入服务的负载情况。
- 其他 SSL 配置可以参考: https://mozilla.github.io/server-side-tls/ssl-config-generator/
2.1.1 数据接入服务
# 定义数据接入服务的 server
# 默认端口 8106。
upstream sensors_data_api {
server 10.0.10.1:8106;
server 10.0.10.2:8106;
server 10.0.10.3:8106;
# 必须使用 ip_hash 以保证数据接入顺序
ip_hash;
# 可选,连接数请根据负载情况进行调整
keepalive 100;
}
# 转发数据接入服务
server {
# 转发之后的端口号,可自定义
listen 8106;
# 域名,根据实际情况填写
server_name xxx.yyy.zzz;
access_log off;
# 以下配置如果开启 ssl 则需要
# ssl on; # 开启 ssl
# ssl_certificate /etc/ssl/fullchain.pem; # 配置 ssl 证书信任链
# ssl_certificate_key /etc/ssl/privkey.pem; # 配置 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_pass http://sensors_data_api;
proxy_ignore_client_abort on;
# 以下两行只有开启 keepalive 才需要设置
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
2.1.2 后台分析服务
# 定义神策后台服务的 server
# 单机版的端口是 8107,且只有一台。集群版是 8107,多台。
upstream sensors_data_web {
server 10.0.10.1:8107;
server 10.0.10.2:8107;
server 10.0.10.3:8107;
ip_hash;
}
# 转发神策后台界面
server {
# 端口号,可自定义
listen 80;
# 域名,根据实际情况填写
server_name xxx.yyy.zzz;
access_log off;
# 以下配置如果开启 ssl 则需要
# ssl on; # 开启 ssl
# ssl_certificate /etc/ssl/fullchain.pem; # 配置 ssl 证书信任链
# ssl_certificate_key /etc/ssl/privkey.pem; # 配置 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;
# 如果不指定 server_name,这里需要替换为 IP,端口号与 upstream sensors_data_web 端口号一致
proxy_redirect http://sensors_data_web:8107 .;
proxy_pass http://sensors_data_web;
proxy_ignore_client_abort on;
}
location /api/ws {
proxy_pass http://sensors_data_web/api/ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2.2 使用阿里云 SLB 进行服务转发
2.2.1 数据接入服务
注意事项:
- 需要开启会话保持。
- 如果需要开启 HTTPS,选择 HTTPS 即可。
2.2.2 后台分析服务
注意事项:
- 1.11 之前版本只能选择 TCP,如果需要开启 HTTPS,需要在神策部署服务器所在的 Nginx 上进行配置。
- 1.11 及之后版本选择对应的 HTTP / HTTPS 协议即可。
- 需要开启会话保持。
- 由于存在部分长耗时请求,超时时间建议设成 1800 秒或者更高。
- 集群版默认端口 8107,单机版默认端口 8107。
2.3 使用 UCloud ULB 进行服务转发
2.3.1 数据接入服务
注意事项:
- 使用源地址的负载均衡算法,保证数据接入的可靠性。
- 需要开启会话保持。
- 如果需要开启 HTTPS,选择 HTTPS 即可。
2.3.2 后台分析服务
注意事项:
需要开启会话保持。
由于存在部分长耗时请求,超时时间建议设成 1800 秒或者更高。
如果需要开启 HTTPS,选择 HTTPS 即可。
2.4 使用 AWS ELB 进行服务转发
2.4.1 数据接入服务
注意事项:
- 需要开启粘性会话(Sticky Sessions)。
- 如果需要开启 HTTPS,选择 HTTPS 即可。
2.4.2 后台分析服务
注意事项:
- 由于 Classic 负载均衡器指南不支持 WebSocket,需要使用应用程序负载均衡器(ALB),或者使用 TCP 协议。
- 需要开启粘性会话(Sticky Sessions)。
- 由于存在部分长耗时请求,空闲连接超时(Idle timeout)建议设成 1800 秒或者更高。
3. 更新神策后台配置
在进行服务转发配置之后,神策后台需要知道转发之后的地址,否则会影响部分功能的使用,包括:
- 可视化埋点配置功能
- 埋点代码生成功能
- 渠道管理功能
假设进行转发配置之后的地址是:
- 数据接入地址:http://saasdemo.cloud.sensorsdata.cn:8106/ (不含任何二级路径或参数)。
- 后台分析地址:http://saasdemo.cloud.sensorsdata.cn/ (不含任何二级路径或参数)。
那么更新相关配置的操作方式如下:
# 登录到任意一台神策服务节点并切换到神策管理账号
su - sa_cluster
# 更新 HTTP 数据接入服务地址
monitor_tools set_config -t global -n data_sink_url -v "http://saasdemo.cloud.sensorsdata.cn:8106/"
# 更新 HTTP 后台分析服务地址
monitor_tools set_config -t global -n web_url -v "http://saasdemo.cloud.sensorsdata.cn/"
# 更新 HTTPS 数据接入服务地址,如有
monitor_tools set_config -t global -n secure_data_sink_url -v "https://saasdemo.cloud.sensorsdata.cn:4006/"
# 更新 HTTPS 后台分析服务地址,如有
monitor_tools set_config -t global -n secure_web_url -v "https://saasdemo.cloud.sensorsdata.cn/"
# 重启服务
sa_admin restart -m web