Pre-1. 前言

VeryNginx是一个基于Nginx/OpenResty开发的拓展程序,可以很方便的按照Matcher对页面执行相应的Action,并且提供了Web UI
项目主页

Part-1. 简介

VeryNginx支持Nginx运行状态分析,可以监控以下指标

  • 请求数量
  • 响应时间
  • 网络流量
  • 当前连接数

而它本身的功能是根据以下Matcher(可一个或多个Matcher)

  • IP
  • UA
  • Host
  • URI
  • Referer
  • Request Args

来执行以下Action

  • 协议锁定
  • 重定向
  • URI重写
  • 浏览器验证(缓解CC)
  • 请求频率限制

总而言之,是一个功能十分强大的小工具

Part-2. 安装

VeryNginx目前支持OpenResty(自动安装)和Nginx(需手动编译),没特殊定制需求的话,就不要自己编译了,麻烦
当然我肯定是要选编译的(滑稽

First-Step. VeryNginx安装

先安装VeryNginx,非常简单

git clone https://github.com/alexazhou/VeryNginx.git
cd VeryNginx
python install.py install verynginx

还有编译安装所需的依赖项

yum groupinstall "Development Tools" -y
yum install pcre pcre-devel zlib zlib-devel libxml2 libxml2-devel libxslt-devel gd gd-devel libatomic_ops-devel -y
Second-Step. Nginx编译

值得注意的是VeryNginx是依赖以下模块的,编译时要带上

lua-nginx-moudule
http_stub_status_module
http_ssl_module

其中lua-nginx-module比较麻烦,依赖比较多
LuaJITngx_devel_kit都需要装上

  • LuaJIT
wget http://luajit.org/download/LuaJIT-2.1.0-beta3.tar.gz
tar -zxvf LuaJIT-2.1.0-beta3.tar.gz
cd LuaJIT-2.1.0-beta3
make
make install
  • 环境变量
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.1
  • NDK
wget https://github.com/simplresty/ngx_devel_kit/archive/v0.3.1rc1.tar.gz
tar -zxvf v0.3.1rc1.tar.gz
  • lua-nginx-module本体
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz
tar -zxvf v0.10.13.tar.gz
  • OpenSSL
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz
tar -zxvf openssl-1.1.1a.tar.gz
  • ngx_brotli(可选,不要的话编译参数删掉)
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init
cd ..
  • Nginx
wget https://nginx.org/download/nginx-1.14.2.tar.gz
tar -zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2

./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/var/run/nginx.pid \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--lock-path=/var/lock/nginx.lock \
--with-http_gunzip_module \
--with-pcre \
--with-pcre-jit \
--with-threads \
--with-stream \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-stream_realip_module \
--with-http_slice_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-http_addition_module \
--with-http_xslt_module \
--with-http_image_filter_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-select_module \
--with-poll_module \
--with-file-aio \
--with-http_degradation_module \
--with-libatomic \
--http-client-body-temp-path=/var/tmp/nginx/client_body \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-ld-opt=-Wl,-rpath,/usr/local/lib \
--add-module=../ngx_brotli \
--add-module=../ngx_devel_kit-0.3.1rc1 \
--add-module=../lua-nginx-module-0.10.13 \
--with-openssl=../openssl-1.1.1a

make
make install
Third-Step. 让VeryNginx跑起来

为了让VeryNginx跑起来,需要在nginx.conf中引入以下内容

Http块外
include /opt/verynginx/verynginx/nginx_conf/in_external.conf;

Http块内
include /opt/verynginx/verynginx/nginx_conf/in_http_block.conf;

Server块内,插入到需要启用的站点配置文件
include /opt/verynginx/verynginx/nginx_conf/in_server_block.conf;

使用我的参数编译的nginx可能会有这个问题,如图所示

只需要执行此命令即可解决
mkdir -p /var/tmp/nginx/client_body

再次测试,nginx配置已经ok

Part-2. 开始使用VeryNginx

VeryNginx 启动后,可以通过浏览器访问管理面板来查看状态以及进行配置。

管理面板地址为 http://"Your Domain"/verynginx/index.html
默认用户名和密码是 verynginx / verynginx。
登录之后就可以查看状态,并对配置进行修改了。修改配置后,点击保存才会生效。

控制台一览

以屏蔽掉IE浏览器的UA头为例,在面板中选定Config之后即可新建Matcher规则

然后在Custom Action中就可以根据这个Matcher来选定需要执行的操作了,这里以Filter为例
对拥有MSIE这个UA头的请求直接返回403

在Curl中模拟可以看到已经是403响应了

而将UA头改为Chrome/73之后,就可以正常收到200响应

Part-3. 结语

总而言之,VeryNginx确实是一个强大易用的小工具,可以针对特定的条件进行相应的操作
这里只是使用了一个最基本的操作,更多高级功能还请自己探索

Comments