1. 概述
1.1 版本
FineBI 伺服器版本 |
---|
6.0 |
1.2 應用場景
部分公司對於工程環境保全等級要求較高,對於開發埠限制較多。
若只開放一個埠,WebSocket 往往無法正常連結。
1.3 功能簡介
在不能申請開放 WebSocket 埠的情況下,可以將socket埠也轉發到開放的埠下。
本文將簡單介紹在 Linux+Nginx+Tomcat 環境下,如何僅開放一個埠8888,仍可正常使用 WebSocket。
注:FineBI 內建了一個容器Websocket方案。推薦優先查看是否可使用該方案:容器Websocket方案
無需任何使用者操作,無需任何手動配置,無需額外開啟埠,系統可自動使用Web容器自帶的WebSocket進行連結,埠複用http埠。
2. 範例
2.1 設定websocket轉發埠
管理者登入數據決策系統,點選「管理系統>系統管理>標準」,設定websocket 請求埠。如下圖所示:
此處設定的埠即為工程唯一對外埠,可自行設定,本文以8888為例。
注1:叢集環境會預設勾選「已配置代理伺服器」,非叢集環境需要手動勾選已配置代理伺服器(表示已經配置nginx)。
注2:FineBI內建了一個容器 websocket 方案,幫助使用者實現快速配置 websocket 埠。
若「管理系統>系統管理>標準」頁面不顯示 HTTPS 設定項,說明此方案生效,Websocket 連結已正確配置,無需其他任何手動配置。
2.2 修改nginx.conf
Nginx 監聽 server 塊下加上對請求 url 包含 /socket.io/ 的分支判斷處理,將socket埠轉發到開放的8888埠下,詳細的配置檔案參考:
...
server {
listen 8888;#監聽埠,這個要和上面的WebSocketConfig.requestPort一致
server_name _;
underscores_in_headers on;
location / {
proxy_http_version 1.1;
proxy_pass http://FR.com;
proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header non_idempotent;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection "";
#proxy_set_header X-Forwarded-Proto "https";
proxy_connect_timeout 20;
proxy_read_timeout 1000;
proxy_send_timeout 300;
}
#這裏匹配/socket.io/轉發給websocket的upstream
location ^~ /socket.io/ {
proxy_pass http://WBS.com;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 20;
proxy_read_timeout 1000;
proxy_send_timeout 300;
}
...
}
...
2.3 重啟服務
重啟 Nginx 和 FineBI 工程後,設定生效。
使用者只需要開放 8888 埠,即可正常使用 BI 工程,正常使用 websocket。