使用 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,port由 8106 改為 4006。
https://test.cloud.sensorsdata.cn:4006/sa?token=xxx
網址二:使用數據接收專用網域名。
https://test.datasink.sensorsdata.cn/sa?token=xxx
使用數據接收專用 datasink 網域名,可以不顯示指定埠號,即 443 為數據接收服務 port。
2.2. 私有部署版使用 HTTPS 的數據接入方案
2.2.1. 在公有雲廠商的負載均衡或者硬體負載設備啟用 HTTPS
強烈建議採用此方式。
2.2.1.1. 用此方案設定 HTTPS 的注意事項
- 常見的負載設備均提供 HTTPS 接入功能,可根據實際情況選擇不同公有雲廠商的負載均衡或硬體負載設備來開啟 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
# 預設port 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_pass http: // sensors_data_api
proxy_ignore_client_abort on
proxy_http_version 1.1
proxy_set_header Connection ""
}
}
# 定義數據接入服務的 server
# 預設port 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_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
# 預設port是 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
}
}
# 定義神策後台服務的 server
# 預設port是 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
}
}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 port 的 HTTPS 網址)加 /debug(例如:https://datasink.cloud.sensorsdata.cn/debug),直接在瀏覽器中連接,如回傳“Sensors Analytics is ready to receive your data!” ,證明該網址設定正確。
- 在瀏覽器中直接連接 HTTPS 後台分析網址(轉傳到 8107 port 的 HTTPS 網址),如果能正常回傳神策登入的介面,證明該網址設定正確。