Aldebaran

人生最棒的感觉,就是你做到别人说你做不到的事。

0%

Nginx-module-vts监控Nginx虚拟主机

三田寺円

前言

最近公司有个需求,就是要统计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

01

参考文档

nginx-module-vts