针对上一篇写的nginx使用nginx_lua模块配置nginx_lua_waf实现web应用防火墙,后来还发现一个很友好的库VeryNginx由春哥开源。
什么是VeryNginx
VeryNginx 是一个功能强大而对人类友好的 Nginx 扩展程序。VeryNginx 基于 lua_nginx_module(openrestry) 开发,实现了高级的防火墙、访问统计和其他的一些功能。 集成在 Nginx 中运行,扩展了 Nginx 本身的功能,并提供了友好的 Web 交互界面。
编译LuaJIT
和上一篇中的一样,同样需要先编译LuaJIT环境,因为VeryNginx
依赖lua。
### 下载
wget http://lepig.qiniudn.com/LuaJIT-2.1.0-beta2.tar.gz
### 解压
tar -zxvf LuaJIT-2.1.0-beta2.tar.gz
### 进入目录
cd cd LuaJIT-2.1.0-beta2/
### 开始编译
make && make install
### 建立软连接
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
### 设置环境变量
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.1 #这个根据版本来选,我下的是luajit2.1版本
添加lua-nginx-module模块
克隆lua-nginx-module
到/usr/local/src
中,如果没有git环境你也可以去下载压缩包,然后在加压过去都是一样的。
cd /usr/local/src
git clone https://github.com/openresty/lua-nginx-module.git
需要说明一下的是,VeryNginx依赖与下面3个模块
http_stub_status_module
http_ssl_module
lua-nginx-module
所以你必须先把前2个也一起安装了,因为我使用的是lnmp一键包,所以默认都已经加了参数,如果你自己编译的nginx请自己加上这2个模块参数
--with-http_ssl_module \
--with-http_stub_status_module
然后就可以执行./install.sh
脚本进行编译安装了。
安装VeryNginx
上面所有环境依赖安装好后就可以正式开始安装VeryNginx
了。
### 克隆仓库到本地
git clone https://github.com/alexazhou/VeryNginx.git
### 进入目录
cd VeryNginx
### 安装verynginx (这条命令只会安装VeryNginx而不会一并把OpenResty也安装了)
python install.py install verynginx
### 参考:https://github.com/alexazhou/VeryNginx/wiki/Use-own-nginx
配置VeryNginx
VeryNginx
安装好以后,会在/opt/verynginx
目录下生成3条对应的配置文件,分别为:
- include /opt/verynginx/verynginx/nginx_conf/in_external.conf;
- include /opt/verynginx/verynginx/nginx_conf/in_http_block.conf;
- include /opt/verynginx/verynginx/nginx_conf/in_server_block.conf;
以上三条指令分别放在 http 配置块外部,http 配置块内部,server 配置块内部,在修改时请保留这三条。
当然也可以使用自己的 nginx.conf 配置文件,把这三条 include 指令加入对应的地方即可。
如果添加了新的 Server 配置块或 http 配置块,也需要在新的块内部加入对应的 include 行。
重启NGINX,配置完成。
WEB配置界面简单使用
进入管理界面
输入http://your.domain/verynginx/index.html进入。
选项介绍
BASIC分类
- Matcher 设定匹配规则
- Response 设定block时响应模板
Custom Action分类
- Redirect 匹配成功后地址重定向
- URI Rewrite 匹配成功重写url地址
- Filter 匹配到规则后选项拒绝还是接受
碰到的问题
当我在保存reponse模板的时候出现Ajax request failed[status code = 200]
错误,去看了issue,然后看下面的疑难问题
参考:https://github.com/alexazhou/VeryNginx/wiki/Trouble-Shooting