本文介紹使用Nginx接入Sentinel流量防護的配置說明。
安裝Sentinel Sidecar
下載AHAS Sentinel Sidecar,并解壓到本地。
建議解壓到/opt
目錄下,操作命令如下:
curl -L -O https://ahasoss-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/sidecar/latest/ahas-sentinel-sidecar-linux.tar.gz
sudo tar -xzf ahas-sentinel-sidecar-linux.tar.gz -C /opt/
解壓之后的安裝目錄為/opt/ahas-sentinel-sidecar-linux
,Nginx Sentinel動態模塊文件位于安裝目錄的lib/<os>-nginx-<version>/
子目錄下。
全局配置
- 加載動態模塊load_module
- 語法:
load_module "/path/to/module.so";
- 默認值: 無
- 配置上下文:
main
使用Nginx Sentinel模塊前,必須先使用
load_module
指令加載之。此指令必須出現在主配置文件最開始的位置(主配置events
配置之前)。以CentOS 7、Nginx-1.16.1、Sentinel Sidecar安裝目錄/opt/ahas-sentinel-sidecar-linux
為例,示例配置如下。load_module "/opt/ahas-sentinel-sidecar-linux/lib/centos7-nginx-1.16.1/ngx_sentinel_module.so";
如果Sentinel Sidecar安裝包未包含您使用的Nginx版本,請提供您的操作系統版本和說明 Nginx自身限制預編譯動態模塊與Nginx版本及編譯配置綁定,升級Nginx版本或修改編譯參數時必須同時更新預編譯動態模塊。Nginx -V
(大寫的V)的完整輸出文本,以便為您提供預編譯Nginx模塊。 - 語法:
- Nginx Sentinel模塊初始化sentinel_init
- 語法:
sentinel_init sidecar unix:<path> | <address>:<port>;
- 默認值:無
- 配置上下文:
main
使用
sentinel_init
指令配置Nginx Sentinel模塊初始化參數。當前即配置Sentinel Sidecar的監聽地址,示例配置如下。sentinel_init sidecar unix:/tmp/sentinel-sidecar.sock;
- 語法:
- Sentinel Sidecar運行命令sentinel_sidecar_run
- 語法:
sentinel_sidecar_run "/path/to/sentinel-sidecar.sh" --app=<name> [--license=<license>] [--ns=<namespace>];
- 默認值:無
- 配置上下文:
main
使用
sentinel_sidecar_run
指令配置Sentinel Sidecar運行命令。Sentinel Sidecar使Nginx工作進程在獨立的子進程中運行。Nginx Sentinel模塊與Sidecar異步通信實現流控功能。在阿里云VPC環境接入時,配置如下:- Sentinel Sidecar啟動腳本路徑,如
/opt/ahas-sentinel-sidecar-linux/bin/sentinel-sidecar.sh
。 - AHAS應用名
--app=<name>
。這里配置的應用名即在AHAS控制臺上查看和管理的應用名。 - 可選配置,AHAS環境(namespace)
--ns=<namespace>
。
在公網環境接入時,還需要添加License配置:
公網接入License
--license=<license>
,可登錄AHAS控制臺查詢您的License,具體操作,請參見查看License。重要 License是機密信息,請注意保密。以阿里云VPC環境,Sentinel Sidecar安裝目錄
/opt/ahas-sentinel-sidecar-linux
為例,示例配置如下。sentinel_sidecar_run "/opt/ahas-sentinel-sidecar-linux/bin/sentinel-sidecar.sh" --app=demo;
- 語法:
HTTP限流配置
限流行為sentinel_block_action
- 語法:
sentinel_block_action off | =code;
- 默認值:
sentinel_block_action =429;
- 配置上下文:
http
,server
,location
Nginx添加Sentinel模塊后,可使用sentinel_block_action
指令配置限流行為。默認配置為sentinel_block_action =429;
,即觸發限流時Nginx立即返回HTTP 429
錯誤碼。sentinel_block_action
指令可分別在Nginx配置文件的http/server/location配置上下文進行配置。
- 當客戶端訪問指定location下的URL請求時,如果該location未配置限流行為,則使用其所在server的配置。
- 如果server也未配置限流行為,則使用HTTP下的配置。
- 如果HTTP下也未配置,則使用內置默認配置,即返回
HTTP 429
錯誤碼。
如Nginx同時作為靜態資源服務器和HTTP反向代理服務器時,靜態資源不需要限流,可在HTTP主配置關閉sentinel流控檢查,在需要限流的location下再按需開啟流控功能。
sentinel_block_action
指令支持如下配置項:
off
:關閉Sentinel流控檢查,即不使用Sentinel模塊,直接放行所有請求。=code
:執行流控檢查并執行限流攔截,觸發限流時Nginx立即返回指定的HTTP錯誤碼,拒絕處理此請求。