Nginx是一款高性能开源的HTTP服务器,通过Nginx Sentinel模块可以快速接入到AHAS网关防护中。当有请求流量时,您可以在网关防护中查看Nginx网关请求的实时QPS和RT等数据。本文介绍在AHAS网关防护中如何接入Nginx和Nginx Demo。
接入Nginx
体验Demo
您还可以通过Demo快速试用Nginx Sentinel流控功能。
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";
说明 由于Nginx自身限制,预编译动态模块与Nginx版本及编译配置项绑定。升级Nginx版本时必须同时更新预编译动态模块。如果Sentinel Sidecar安装包未包含您使用的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" --addr=<addr> --app=<name> [--license=<license>];
- 默认值:无
- 配置上下文:
main
使用
sentinel_sidecar_run
指令配置Sentinel Sidecar运行命令。Sentinel Sidecar使用Nginx工作进程用户在独立的子进程中运行。Nginx Sentinel模块与Sidecar异步通信实现流控功能。在阿里云VPC环境接入时,需包含以下配置。- Sentinel Sidecar启动脚本路径,如
/opt/ahas-sentinel-sidecar-linux/bin/sentinel-sidecar.sh
。 - 监听地址
--addr=<addr>
,这里配置的监听地址必须与sentinel_init
指令配置的监听地址一致。 - AHAS应用名
--app=<name>
。这里配置的应用名即在AHAS控制台上查看和管理的应用名。
在公网环境接入时,除以上配置外,还需要配置License。
- 公网接入License配置
--license=<license>
,可登录AHAS控制台查询您的License。
以阿里云VPC环境,Sentinel Sidecar安装目录
/opt/ahas-sentinel-sidecar-linux
为例,示例配置如下。sentinel_sidecar_run "/opt/ahas-sentinel-sidecar-linux/bin/sentinel-sidecar.sh" --addr=unix:/tmp/sentinel-sidecar.sock --app=demo;
说明 当前Sentinel Sidecar进程不支持reload,如果修改了sentinel_sidecar_run
配置,需要重启Nginx后修改才会生效。 - 语法:
HTTP限流配置
- 限流行为sentinel_block_action
- 语法:
sentinel_block_action off | dry_run | =code;
- 默认值:
sentinel_block_action =503;
- 配置上下文:
http
,server
,location
Nginx添加Sentinel模块后,可使用
sentinel_block_action
指令配置限流行为。默认配置为sentinel_block_action =503;
,即触发限流时Nginx立即返回HTTP 503
错误码。sentinel_block_action
指令可分别在Nginx配置文件的http/server/location配置上下文进行配置。- 当客户端访问指定location下的URL请求时,如果该location未配置限流行为,则默认使用该location所在server的配置。
- 如果server也未配置限流行为,则默认使用HTTP下的配置。
- 如果HTTP下也未配置,则使用内置默认配置,即返回
HTTP 503
错误码。
如Nginx同时作为静态资源服务器和HTTP反向代理服务器时,静态资源不需要限流,可在HTTP主配置关闭sentinel流控检查,在需要限流的location下再按需开启流控功能。
sentinel_block_action
指令支持如下配置项:off
:关闭Sentinel流控检查,即不使用Sentinel模块,直接放行所有请求。dry_run
:执行流控检查,AHAS控制台可看到流量监控,但不会真正拦截请求,直接放行所有请求。=code
:执行流控检查并执行限流拦截,触发限流时Nginx立即返回指定的HTTP错误码,拒绝处理或转发此请求。
- 语法:
- 限流日志级别sentinel_block_log_level
- 语法:
sentinel_block_log_level debug | info | notice | warn | error;
- 默认值:
sentinel_block_log_level warn;
- 配置上下文:
http
,server
,location
Sentinel流控检查触发限流时,使用
sentinel_block_log_level
指令配置限流日志的严重级别。说明 当限流日志的严重级别比error_log指令配置的严重级别低时,将不会打印限流日志。error_log默认级别为error,限流日志默认级别为warn ,即默认不会打印限流日志。AHAS控制台可以更直观清晰的查看流量监控,通常不需要打印限流日志。限流日志通常仅用于开发测试。限流日志默认为warn级别。如果error_log配置的日志严重级别等于或低于warn时,可降低限流日志的严重级别(如设置为debug)以避免打印限流日志。
- 语法: