本文介绍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是机密信息,请注意保密!

    以阿里云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;
    • 配置上下文:httpserverlocation

    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;
    • 配置上下文:httpserverlocation

    Sentinel流控检查触发限流时,使用sentinel_block_log_level指令配置限流日志的严重级别。

    说明 当限流日志的严重级别比error_log指令配置的严重级别低时,将不会打印限流日志。error_log默认级别为error,限流日志默认级别为warn ,即默认不会打印限流日志。

    AHAS控制台可以更直观清晰的查看流量监控,通常不需要打印限流日志。限流日志通常仅用于开发测试。限流日志默认为warn级别。如果error_log配置的日志严重级别等于或低于warn时,可降低限流日志的严重级别(如设置为debug)以避免打印限流日志。