低程式碼平臺如何藉助Nginx實現閘道器服務

葡萄城技術團隊發表於2023-10-07

摘要:本文由葡萄城技術團隊於部落格園原創並首發。轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。

前言

在典型的系統部署架構中,應用伺服器是一種軟體或硬體系統,它承載著應用程式的核心邏輯。它接收客戶端的請求並處理相應的業務邏輯、資料操作等任務。應用伺服器通常被用於支援 Web 應用程式、移動應用程式和企業應用程式等。在應用伺服器之上通常是閘道器伺服器,在其下方是資料庫服務。有趣的是,在低程式碼平臺中,同樣也存在應用伺服器,今天小編將以葡萄城公司的企業級低程式碼開發平臺——活字格為例給大家介紹閘道器伺服器對於低程式碼平臺的輔助作用。

使用Nginx實現的應用場景

在本文中,將以閘道器伺服器Nginx為例,展示閘道器服務的四個場景:

  1. 跨域訪問:讓多個應用共享同一個伺服器的埠。
  2. 靜態資源:透過微信公眾平臺等驗證。
  3. IP黑白名單:滿足更高的安全防護要求。
  4. 訪問日誌:詳細記錄並分析系統響應能力。

1.跨域訪問:讓多個應用共享同一個伺服器的同一個埠

將同一個系統的多個模組拆分成若干個應用,不論是開發管理還是系統運維都是很值得推薦的實踐模式。但如果一個應用的前端頁面需要呼叫另一個應用的服務端命令時,會遇到跨域訪問的問題。為了解決這個問題,我們需要將這些跨應用呼叫的功能全部挪到服務端命令中:A應用的前端頁面呼叫A應用的服務端命令,在該服務端命令中呼叫B應用的WebAPI。這種做法平添了開發A應用服務端命令的工作量,後期維護時也會有額外的工作和風險。

在編碼開發時,通常是透過閘道器將所有應用統一到同一個地址和埠中,來避免這種跨域訪問的問題。而在低程式碼開發中,解決的方式也是一樣的。

在伺服器上架設一臺Nginx伺服器,將多個應用作為Nginx的upstream。具體的配置方法如下:

(1) 修改Nginx配置,在http節點下方為管理控制檯和每個應用配置一個upstream節點,包含機器名和埠號。在測試環境中,Nginx安裝在應用伺服器上,所以這裡可以直接用localhost。常規情況下,Nginx需要部署到和應用伺服器在同一個區域網內的另外一臺伺服器上,此時,需要將localhost替換為該伺服器的內網IP。

提示:為應用伺服器新增upstream而不是直接在location中跳轉,可以提升配置檔案的可讀性。

upstream us-server{
     server localhost:22345;
   }

   upstream red-server{
     server localhost:9101;
   }

   upstream green-server{
     server localhost:9102;
   }

(2)在http→server節點中監聽80埠或其他指定的埠號。

listen    80;

(3)在http→server節點中,為管理控制檯和每個應用分別配置一個location節點,包含URL的匹配規則和對應的upstream。最常用的規則是從頭開始匹配,即^~意味著以後面的字串開頭,如location ^~ /red/匹配到的是所有以/red/開頭的location(URL中埠號後面的部分)。

 location ^~ /UserService/ {
       proxy_pass http://us-server/UserService/;
       proxy_redirect default;   
     }
 
 location ^~ /red/ {
   proxy_pass http://red-server/red/;
   proxy_redirect default;
 }
 
 location ^~ /green/ {
   proxy_pass http://green-server/green/;
   proxy_redirect default;
 } 

(4)在活字格管理控制檯上,將應用的“域名”(應用管理→應用→常規設定→設定域名)修改為Nginx監聽的埠,確保頁面的外部導航正常執行。應用的配置中,需要包含應用名。

管理控制檯的“域名”也需要設定(設定→安全設定→設定管理控制檯站點的域名),控制檯的配置不包含應用名。

擴充套件場景:
如果您的IT安全策略要求只能開放80/443埠,但需要訪問到多個應用時,也可以用這個方案,實現埠統一化。

2.靜態資源:透過微信公眾平臺等驗證

在對接微信公眾平臺等第三方系統時,對方通常會提出基於檔案的域名驗證機制,如微信公眾平臺的JS介面域名驗證需要將特定檔案放到域名的根目錄。

此時,可以使用閘道器的靜態資源伺服器能力,完成驗證工作。

在【1.跨域訪問】的基礎上繼續配置Nginx檔案,具體的操作方法如下:

(1):在域名管理的介面上,透過ICP備案的域名指向Nginx伺服器的外網地址。

(2):將需要對外提供訪問的靜態檔案存放到Nginx伺服器上Nginx靜態資源根目錄中,如/etc/Nginx/html(安裝方式和版本不同,根目錄還可能是/usr/share/Nginx/html或/var/www/html,預設情況下,Nginx根目錄中有index.html和50x.html兩個檔案)。Nginx將根目錄中的檔案以Web靜態資源的形式提供給外部使用。具體而言就是接收到URL為 /xxx.yyy 的請求時,將根目錄中的xxx.yyy檔案內容作為響應來返回。

3.IP黑白名單:滿足更高的安全防護要求

對於一些高安全要求的應用場景,通常會要求做黑白名單,如僅允許特定的IP訪問、或不允許某個特定的IP訪問。這些工作推薦在閘道器上執行,將風險攔截在應用伺服器之外。
因為活字格內建的管理控制檯中包含了應用管理、使用者角色管理等敏感操作,很多企業要求為該應用啟用白名單控制,僅允許公司IT運維團隊專用的IP地址訪問。接下來,我們在【二、跨域訪問】的基礎上繼續完善Nginx配置來實現白名單。具體的操作方法如下:

修改Nginx配置中http→server節點中找到管理控制檯對應的location,在下面追加以下內容,將內網的10.32.209.252和外網的113.132.178.118新增到白名單。

 location ^~ /UserService/ {
       proxy_pass http://us-server/UserService/;
       proxy_redirect default;  
       allow 10.32.209.252;
       allow 113.132.178.118;
       deny all; 
     }

重要提示:
閘道器層面的白名單層次高於系統防火牆,兩者不是取代關係。您依然需要使用防火牆的策略來避免暴露不必要的埠,以降低安全風險。

4.訪問日誌:詳細記錄並分析系統響應能力

當需要評估系統的響應效能、可用性等引數,尋找改進方向時,您需要透過第三方來記錄應用的訪問日誌,然後將其接入主流的日誌處理和分析工具鏈(日誌分析是一個“高技術含量”的領域,已經有成熟的方案,如ELK)進行後續處理。

好訊息是,Nginx內建了日誌機制,只需要做非常簡單的配置,就可以得到想要的日誌,然後再按照ELK的幫助文件,就能搞定自己的日誌分析平臺了。繼續在【3.IP黑白名單】的基礎上繼續完善Nginx配置和日誌配置。具體的操作方法如下:

(1):修改Nginx配置中http節點,新增一個名為json的日誌模板,便於filebeats抓取。

log_format json escape=json '{"time_local": "$time_local", '
              '"remote_addr": "$remote_addr", '
              '"request_uri": "$request_uri", '
              '"status": $status, '
              '"upstream_time": "$upstream_response_time"}';

(2):修改http→server節點,追加訪問日誌的配置,指定檔案路徑和剛才定義的名為json的模板access_log /var/log/Nginx/access.log json;

常用的日誌專案和引數如下所示:

如果您對活字格感興趣,可以點選這裡瞭解關於活字格的詳細資訊:https://www.grapecity.com.cn/solutions/huozige
點選這裡可以免費下載:https://www.grapecity.com.cn/solutions/huozige/download

總結

本文中用到的配置檔案如附件連結,採用了最簡單的配置方式。其中,worker_processes 和 worker_connections 與資源佔用和效能相關。請根據機器配置情況進行適當調整。

附件連結(Nginx.conf):https://gcdn.grapecity.com.cn/forum.phpmod=attachment&aid=MjkzOTY0fGEwYWYyMWE4fDE2OTUxODg0NjZ8ODE2MDZ8MTg2NjYy

擴充套件連結:

從表單驅動到模型驅動,解讀低程式碼開發平臺的發展趨勢

低程式碼開發平臺是什麼?

基於分支的版本管理,幫助低程式碼從專案交付走向定製化產品開發

相關文章