如果我们服务器上有多个网站,有时某个网站被大流量攻击了,但是又不清楚具体是哪个网站被攻击了,这时可以通过nginx-module-vts工具统计具体哪个网站消耗的流量最多,从而排查出具体是哪个网站被攻击,好根据监测做出具体的防范措施,下面给出具体的部署流程
一、下载插件nginx-module-vts并上传解压
最新版下载地址:
官方地址:https://github.com/vozlt/nginx-module-vts
国内镜像:https://gitee.com/x0x5c0f/nginx-module-vts
nginx-module-vts这里下载的是最新版本v0.2.4
cd /www/server/nginx/src //这里根据自己的实际nginx目录更换 unzip nginx-module-vts-master.zip //上传下载的插件nginx-module-vts,并解压 rm nginx-module-vts-master.zip //删除上传的压缩包
二、重新编译
将原nginx可执行文件备份,不备份也可以,后面的make install命令会自动备份一份为nginx.old;但是每次测试都会覆盖掉nginx.old,所以为了保险起见,最好自己手动备份下,然后使用./configure重新编译
cp /www/server/nginx/sbin/nginx /www/server/nginx/sbin/nginx_bak # 手动备份一下 nginx -V //查看所有配置参数,并复制下来,替换下面的<原来的参数>部分 ./configure <原来的参数> --add-module=/www/server/nginx/src/nginx-module-vts-master //替换后的编译命令如下 ./configure --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-http_auth_request_module --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --add-module=/www/server/nginx/src/nginx-module-vts-master make && make install //编译和安装,将原来/www/server/nginx/sbin/nginx备份为nginx.old,同时替换掉原有nginx nginx -s reload //重新启动
附nginx-module-vts v0.2.2等其他版本安装流程
//下载压缩包解压 cd /www/server/nginx/src wget -O nginx-module-vts-0.2.2.tar.gz https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.2.2.tar.gz tar -zxvf nginx-module-vts-0.2.2.tar.gz rm nginx-module-vts-0.2.2.tar.gz //编译安装 cp /www/server/nginx/sbin/nginx /www/server/nginx/sbin/nginx_bak # 手动备份一下 nginx -V //查看编译参数configure arguments ./configure <原来的参数> --add-module=/www/server/nginx/src/nginx-module-vts-0.2.2 ./configure --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-http_auth_request_module --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --add-module=/www/server/nginx/src/nginx-module-vts-0.2.2 make && make install //编译和安装,将原来/www/server/nginx/sbin/nginx备份为nginx.old,同时替换掉原有nginx nginx -s reload //重新启动
三、将nginx-module-vts参数添加到nginx配置文件中
将下面代码添加到nginx配置文件中,然后访问网址即可http://ip:41758/nginx-status实时看到自己网站流量统计效果
vhost_traffic_status_zone; server { listen 41758; location /nginx-status { vhost_traffic_status_display; vhost_traffic_status_display_format html; } }
也可以nginx配置文件中只保留这一行配置文件
vhost_traffic_status_zone;
然后新建一个网站,在网站对应配置文件中,access_log的前面,添加如下代码,然后通过对应网址http://www.test.com/nginx-status即可以实时查看流量
location /nginx-status { vhost_traffic_status_display; vhost_traffic_status_display_format html; }
访问效果
这次在安装调试中,遇到一个问题,网上查询了很久也没有找到解决方法,特此记录下,在保存配置文件会一直提示下面信息:
nginx: the configuration file /www/server/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /www/server/nginx/conf/nginx.conf test failed
如果重新加载配置文件nginx -s reload,也会提示:
invalid PID number “” in “/www/server/nginx/logs/nginx.pid”
排查半天发现去掉配置文件里的“include /www/server/panel/vhost/nginx/*.conf;”后会保存成功;然后进入到对应目录,发现里面有一个免费防火墙配置文件备份,一直导致编译失败;然后才想起来是以前安装过Nginx免费防火墙,现在最新宝塔面板已经不支持了,而且又没法卸载掉,这里只需要把这个配置文件备份重新命名为“free_waf_bak.conf1”保证不被调用即可,然后重新make install即可成功
更多使用教程可参考这篇文章:《nginx nginx-module-vts 监控模块》