前言
最近公司有个需求,就是要统计Nginx每个vhost(虚拟主机)的流量和请求,上网查了一圈 发现了 两个模块能够满足要求ngx_req_status和nginx-module-vts。
这里主要讲nginx-module-vts(ngx_req_statusy已经有4年没有更新了)。
简单介绍一下
nginx-module-vts他可以记录单个页面的流量,http status的流量,后端代理的流量已经动态dns的流量,还有来自地区/国家的流量,其中可以进行限制流量,并且他还有一个页面,可以根据server_name进行统计域名的流量已经状态码,只需要简单的配置和编译就可以实现
编译Nginx
既然是第三方模块,那肯定是需要自己编译Nginx啦。具体可以查看我之前写的文章源码编译Nginx。
其实和正常的Nginx编译没什么两样,只是要在原来的编译参数后追加: --add-module=../nginx-module-vts
下载nginx-module-vts
需要先安装好git, 这里我们直接拉取
$ git clone git://github.com/vozlt/nginx-module-vts.git
重新编译Nginx(这里仅仅列出编译参数,供大家查考)
如果你想查看原来的编译参数可以通过
nginx -V
来查看,然后在编译的的时候增加--add-module=../nginx-module-vts
.即可具体的参数也可以参考:
./configure --user=nginx --group=nginx \ --prefix=/usr/local/nginx-1.14.1 \ --conf-path=/usr/local/nginx-1.14.1/conf/nginx.conf \ --pid-path=/var/run/nginx/nginx.pid \ --with-pcre=../pcre-8.42 \ --with-zlib=../zlib-1.2.11 \ --with-openssl=../openssl-1.1.1 \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module \ --with-stream_geoip_module \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_geoip_module \ --with-http_realip_module \ --with-http_xslt_module \ --with-file-aio \ --with-http_perl_module \ --with-http_auth_request_module \ --with-http_gzip_static_module \ --with-http_secure_link_module \ --with-http_sub_module \ --with-http_slice_module \ --with-http_stub_status_module \ --add-module=../nginx-module-vts
修改Nginx配置
操作前注意备份原先的配置文件
查看单个vhost的流量
需要将下面的配置增加到vhost的配置中, 例如我们要查看gateone.1737376.com的流量,则
$ vim /usr/local/nginx/conf/nginx.conf
vhost_traffic_status_zone;
$ vim /usr/local/nginx/conf/vhosts/gateone.1737376.com.conf
location /ng_status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
查看多个vhost的流量(可选)
如果需要查看多个vhost的流量,那么就需要在多个vhost上增加配置。我们可以利用sed命令批量修改。当然也可以直接一个个vhost修改过去。。。。
#修改nginx.conf
$ vim /usr/local/nginx/conf/nginx.conf
vhost_traffic_status_zone;
#备份vhosts
$ cd /usr/local/nginx/conf/
$ cp -rp vhosts vhosts.old
#将要修改的内容写到一个文本里面,看例如
$ vim /usr/local/nginx/conf/nginx.txt
location /ng_status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
# 执行批量命令
$ sed -i "/client_body_buffer_size/r /usr/local/nginx/conf/nginx.txt" `grep -rl access_log ./vhosts`
检查配置
执行完要记得检查一下配置
$ /usr/local/nginx/sbin/nginx -t
访问
访问域名的时候记得加/ng_status
,例如
$ curl https://gateone.1737376.com/ng_status