摘要:本文由葡萄城技術團隊於部落格園原創並首發。轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。
前言
在典型的系統部署架構中,應用伺服器是一種軟體或硬體系統,它承載著應用程式的核心邏輯。它接收客戶端的請求並處理相應的業務邏輯、資料操作等任務。應用伺服器通常被用於支援 Web 應用程式、移動應用程式和企業應用程式等。在應用伺服器之上通常是閘道器伺服器,在其下方是資料庫服務。有趣的是,在低程式碼平臺中,同樣也存在應用伺服器,今天小編將以葡萄城公司的企業級低程式碼開發平臺——活字格為例給大家介紹閘道器伺服器對於低程式碼平臺的輔助作用。
使用Nginx實現的應用場景
在本文中,將以閘道器伺服器Nginx為例,展示閘道器服務的四個場景:
- 跨域訪問:讓多個應用共享同一個伺服器的埠。
- 靜態資源:透過微信公眾平臺等驗證。
- IP黑白名單:滿足更高的安全防護要求。
- 訪問日誌:詳細記錄並分析系統響應能力。
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
擴充套件連結: