ngx_req_status是一个第三方模块,它用来展示nginx请求状态信息,类似于apache的status,ats的stats_over_http和channel_stats,nginx自带的模块只能显示连接数等等信息,我们并不能知道到底有哪些请求、以及各url域名所消耗的带宽是多少。ngx_req_status提供了这些功能:
功能特性
按域名、url、ip等等统计信息
统计总流量
统计当前带宽峰值带宽
统计总请求数量
该模块的官网地址
https://github.com/zls0424/ngx_req_status.git
下载源码并手动打补丁
下载它的源码,发现该模块源码比较早,最新的补丁是write_filter-1.7.11.patch,鉴于当前nginx的版本是1.12.2,最稳妥的方法是
参照该补丁文件,直接手动修改现在的相应源文件(行号相差不太远)
src/http/ngx_http_write_filter_module.c 第263行
相关声明在
src/http/ngx_http.h
src/http/ngx_http.c
src/http/ngx_http_core_module.h
编译
下面开启编译该模块的源码
cd nginx-1.12.2
./configure --with-http_ssl_module
--with-pcre=/usr/local/src/pcre-8.41
--with-zlib=/usr/local/src/zlib-1.2.11
--with-openssl=/usr/local/src/openssl-1.1.0g
--with-http_stub_status_module
--add-module=/usr/local/src/ngx_cache_purge
--add-module=/usr/local/src/ngx_req_status
make
make install
配置
在nginx.conf的某个server块中添加
http {req_status_zone server_name $server_name 256k;req_status_zone server_addr $server_addr 256k;req_status_zone server_url $server_name$uri 256k;req_status server_name server_addr server_url;server {server_name localhost;location /ngx_req_status {req_status_show on;} }
}
完整的nginx.conf文件如下:
https://github.com/taoyunxing/github_test/blob/master/nginx.conf
然后检查nginx.conf语法合法性并重启nginx
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx
注意重启并不会生效
/usr/local/nginx/sbin/nginx -s reload
指令解释
req_status_zone
语法: req_status_zone name string size
默认值: None
配置块: http
定义请求状态ZONE,请求按照string分组来排列,例如:
req_status_zone server_url $server_name$uri 256k;
域名+uri将会形成一条数据,可以看到所有url的带宽,流量,访问数
req_status
语法: req_status zone1[ zone2]
默认值: None
配置块: http, server, location
在location中启用请求状态,你可以指定更多zones。
req_status_show
语法: req_status_show on
默认值: None
配置块: location
展示数据
测试
curl -v 'http://127.0.0.1/ngx_req_status'
参考文献
[1].http://www.ttlsa.com/nginx/nginx-modules-ngx_req_status/
[2].https://www.cnblogs.com/onew/p/5186583.html
[3].https://github.com/zls0424/ngx_req_status