1. 概述
1.1 功能簡介
報表伺服器部署在內網,不能存取外網,也不能被外網存取。這種情況下可以透過配置代理伺服器來轉發內網報表伺服器和外部的通訊。
該方案可以解決將 PC 裝置與行動裝置切換至同一網路環境下,才能查看範本的問題。
1.2 場景假設
假設有兩台機器,一台機器 192.168.5.61 作為代理伺服器,一台機器 192.168.5.24 作為內網伺服器。
下面以 Windows 系統為例進行配置。
2. 正向代理配置
2.1 說明
報表伺服器向代理伺服器傳送請求類似http://代理ip:埠/gettoken,代理將請求轉給 oapi.dingtalk.com,進而實現對外部微信/釘釘伺服器的存取。
2.2 步驟
1)代理伺服器下載地址:nginx,這裏以 nginx/Windows-1.14.0 為例,點選下載。
2)下載完成後解壓即可使用,點選 nginx.exe,在瀏覽器內輸入http://localhost/ 出現 Nginx 歡迎頁面即部署成功。
3)修改配置檔案conf/nginx.conf,在http{}之間新增如下程式碼:
server {
listen 8114; # listen 埠,代理伺服器的埠,可以自訂
server_name 192.168.5.61; # sever_name, 寫的代理伺服器的 IP 地址
location / {
proxy_redirect off;
proxy_pass https://oapi.dingtalk.com; #轉發地址,以釘釘為例 https://oapi.dingtalk.com,微信類似 https://qyapi.weixin.qq.com
}
location = /favicon.ico {
log_not_found off;
}
}
4)重啟 Nginx,在瀏覽器內輸入http://代理ip:埠/gettoken,比如:http://192.168.5.61:8114/gettoken,有如下釘釘傳回資訊即表示代理伺服器配置成功。
5)安裝釘釘插件後,在釘釘基本資訊頁面裏,填入代理地址後儲存,然後在成員管理裏面同步通訊錄,可以同步即表示正向代理配置成功。
詳情請參見:釘釘整合
3. 反向代理配置
3.1 說明
存取代理伺服器env.finedevelop.com:56108/WebReport/ReportServer?op=fs,代理將請求都轉給內網報表伺服器 192.168.5.24:8080,進而實現對內網報表伺服器的存取。
注:這個屬於標準環境配置,客戶需要根據自己的網路環境自行配置,這裏配置步驟僅供參考。
代理伺服器配了一個埠映射,可以被外網存取 192.168.5.61:8443—>env.finedevelop.com:56108
內網報表伺服器的存取地址是 192.168.5.24:8080/WebReport/ReportServer?op=fs
3.2 步驟
1)代理伺服器的部署同上,下載並安裝 Nginx。
2)修改 Nginx 配置檔案conf/nginx.conf,在http{}之間新增如下程式碼:
server {
listen 8443; # listen 埠,代理伺服器的埠,可以自訂
server_name env.finedevelop.com; # server_name,寫的代理伺服器的地址
location / {
proxy_pass http://192.168.5.24:8080; # 轉發地址 內網伺服器的 IP 和埠
proxy_set_header Host env.finedevelop.com:56108; # 轉發的請求裏的 host 資訊,,寫的開啟在瀏覽器裏 URL 的地址
}
}
3)重啟 Nginx,瀏覽器內輸入env.finedevelop.com:56108/WebReport/ReportServer可以正常登入並存取伺服器,則表示配置成功。
即可透過env.finedevelop.com:56108/WebReport/ReportServer?op=fs存取內網伺服器,同時在 微信/釘釘 管理中也可以同步獲取通訊錄了。
4. 10.0單機下 Apache 代理方案
4.1 說明
Apache 配置了反向代理後,WebSocket 怎麼處理能才能保證功能可用呢?下面將給出詳細的方案。
4.2 步驟
1)下載和安裝
首先下載和安裝好 Apache 伺服器,下載和安裝方法此處不予說明,使用者自行查閱相關資料即可。
2)Apache 模組啟動
在%Apache_Home%\conf路徑下, 修改 httpd.conf 檔案,將以下模組的程式碼註釋掉。
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule headers_module modules/mod_headers.so
3)配置 WebSocket 監聽埠
在%Apache_Home%\conf路徑下,修改 httpd.conf 檔案,新增 WebSocket 監聽埠38888,如下圖所示:
4)配置工程 http 代理
在%Apache_Home%\conf路徑下,修改 httpd.conf 檔案,在檔案最後新增如下程式碼:
<VirtualHost *:80>
ProxyPass / http://192.168.5.246:8080/
ProxyPassReverse / http://192.168.5.246:8080/
ProxyPreserveHost On
</VirtualHost>
注:程式碼中 80 是 Apache 所監聽的埠,ProxyPass 和 ProxyPassReverse 中的 192.168.5.246:8080 是我們的請求的工程伺服器 IP 和埠。
5)配置 WebSocket 代理
在%Apache_Home%\conf路徑下,修改 httpd.conf 檔案,在檔案最後新增如下程式碼:
<VirtualHost *:38888>
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://192.168.5.246:38888%{REQUEST_URI} [P]
ProxyRequests Off
ProxyMaxForwards 100
ProxyPreserveHost On
ProxyPass / http://192.168.5.246:38888/
</VirtualHost>
注:程式碼中 38888 是 Apache 所監聽的埠,RewriteRule 和 ProxyPass 中的 192.168.5.246:38888 是需要我們的請求的工程伺服器 IP 和 WebSocket 埠。
6)存取平台
完成上述5個步驟後,在%Apache_Home%\bin路徑下,雙擊 httpd.exe 即可啟動 Apache,在瀏覽器中存取localhost/webroot/decision,即可正常存取平台,如下圖所示:
測試 WebSocket 是否連結成功,如下圖所示:
注:本文中 WebSocket 埠和 FineReport 伺服器埠均為38888,這是由於 Apache 和 FineReport 工程在不同的伺服器上,因而沒有衝突;但如果在一台伺服器上,則需要將 WebSocket 監聽埠改為38889。
5. 設定代理伺服器地址
可透過「fine_conf_entity視覺化配置插件」設定代理伺服器地址。重啟伺服器後設定生效。
注:修改 FineDB 資料庫表欄位值的方法請參考 FineDB 常用表欄位修改 。
配置項 | 修改規則 |
---|---|
MobileConfig.appMsgProxy | 參數值為非空字串 預設值為_EMPTY_ 代理伺服器地址格式為: http://ip:port/mobile/push/message/send |