V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
AlexaZhou
V2EX  ›  分享创造

对人类友好并且强大的 VeryNginx

  AlexaZhou ·
alexazhou · 2016-02-03 22:36:46 +08:00 · 27421 次点击
这是一个创建于 3217 天前的主题,其中的信息可能已经有所发展或是发生改变。

之前工作中经常在 Nginx 里面配置各种规则,感觉 Nginx 功能强大但并不是很易用。

于是就觉得可以写一个强大而且对人类友好的 Nginx

前前后后写了一个多月,总算是在过年之前完成了

逻辑通过 lua 实现,嵌入到 Nginx 中,自带前端界面

传送门: https://github.com/alexazhou/VeryNginx

VeryNginx = Very powerful and friendly nginx

功能上主要是实现了高级的防火墙,访问统计,和其他的一些功能,也就是对 Nginx 本身功能的一些强化。

并且:提供了更友好的 web 交互界面(这是重点)

在 web 界面里面修改配置后,保存后即刻生效,并不需要重启 Nginx 或者 reload 。

主要功能如下:

Nginx 运行状态分析

  • 每秒请求数
  • 响应时间
  • 网络流量
  • 网络连接数

请求过滤

VeryNginx 可以基于按照以下信息对请求进行过滤:

  • IP
  • UserAgent
  • 请求路径(URI)
  • 请求参数

通过配置过滤规则,可以阻止 SQL 注入, Git , SVN 文件泄露,拦截扫描工具等

访问统计

VeryNginx 可以统计网站每个 URI 的访问情况,包括每个 URI 的:

  • 总请求次数
  • 各状态码次数
  • 返回总字节数
  • 每请求平均字节数
  • 总响应时间
  • 平均响应时间

附一张 VeryNginx 的界面图

Nginx 运行状态

欢迎大家试用~

120 条回复    2019-01-04 17:29:40 +08:00
1  2  
lightening
    101
lightening  
   2016-02-10 21:44:59 +08:00   ❤️ 1
这么好的东西,要是能做成 Docker image 方便部署就好了~
think2011
    102
think2011  
   2016-02-10 21:51:36 +08:00   ❤️ 1
你搞的这个东西, exciting !
AlexaZhou
    103
AlexaZhou  
OP
   2016-02-10 22:15:37 +08:00
@xuhaoyangx 对的,让 VeryNginx 目录对 nginx 进程可写就行了,因为会保存配置在里面
AlexaZhou
    104
AlexaZhou  
OP
   2016-02-10 22:18:11 +08:00
@Yamade 你是说 IP 黑名单吗,在 IP 过滤里面配置就可以了
coolloves
    105
coolloves  
   2016-02-11 09:36:16 +08:00 via iPhone   ❤️ 1
mark 感谢分享
kmahyyg
    106
kmahyyg  
   2016-02-14 21:36:48 +08:00   ❤️ 1
starred 楼主可以考虑内置并通过 gui 启用一些常用的 modules ,新版的 nginx 已经可以动态加载.so
micookie
    107
micookie  
   2016-02-16 09:45:54 +08:00   ❤️ 1
已收藏
aitaii
    108
aitaii  
   2016-02-19 20:54:25 +08:00 via Android   ❤️ 1
收藏了
AlexaZhou
    109
AlexaZhou  
OP
   2016-02-22 23:52:50 +08:00
通知一下,经过这段时间的开发, VeryNginx 有了一个大更新,也修正了不少 bug

现已经合并到 master 了,作为 v0.2-beta 版本发布了

主要变更见:
https://www.v2ex.com/t/257521#reply11

呃,那个,最早的版本确实有不少奇怪的 bug ,大家抽空及时更新吧
@wph95 @rrfeng @kenneth @withrock
yov123456
    110
yov123456  
   2016-03-13 13:38:04 +08:00
请问设置 Browser Verify 的时候可以定义白名单吗?
yov123456
    111
yov123456  
   2016-03-13 13:40:10 +08:00
@yov123456 好吧我看错了……可以自定义 macther ……
tyhunter
    112
tyhunter  
   2016-03-15 22:15:05 +08:00
LZ 你好,我按照你的教程安装 verynginx ,在“./configure --prefix=/opt/VeryNginx --user=nginx --group=nginx --with-http_stub_status_module --with-luajit ”这一步中提示
make[1]: Leaving directory `/root/ngx_openresty-1.9.7.1/build/LuaJIT-2.1-20151219/src'
==== Successfully built LuaJIT 2.1.0-beta1 ====
make install TARGET_STRIP=@: CCDEBUG=-g CC=cc PREFIX=/opt/VeryNginx/luajit DESTDIR=/root/ngx_openresty-1.9.7.1/build/luajit-root/
==== Installing LuaJIT 2.1.0-beta1 to /opt/VeryNginx/luajit ====
mkdir -p /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/bin /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/lib /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/include/luajit-2.1 /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/share/man/man1 /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/lib/pkgconfig /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/share/luajit-2.1.0-beta1/jit /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/share/lua/5.1 /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/lib/lua/5.1
cd src && install -m 0755 luajit /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/bin/luajit-2.1.0-beta1
cd src && test -f libluajit.a && install -m 0644 libluajit.a /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/lib/libluajit-5.1.a || :
rm -f /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/lib/libluajit-5.1.so.2.1.0 /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/lib/libluajit-5.1.so /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/lib/libluajit-5.1.so
cd src && test -f libluajit.so && \
install -m 0755 libluajit.so /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/lib/libluajit-5.1.so.2.1.0 && \
ldconfig -n /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/lib && \
ln -sf libluajit-5.1.so.2.1.0 /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/lib/libluajit-5.1.so && \
ln -sf libluajit-5.1.so.2.1.0 /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/lib/libluajit-5.1.so || :
cd etc && install -m 0644 luajit.1 /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/share/man/man1
cd etc && sed -e "s|^prefix=.*|prefix=/opt/VeryNginx/luajit|" -e "s|^multilib=.*|multilib=lib|" luajit.pc > luajit.pc.tmp && \
install -m 0644 luajit.pc.tmp /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/lib/pkgconfig/luajit.pc && \
rm -f luajit.pc.tmp
cd src && install -m 0644 lua.h lualib.h lauxlib.h luaconf.h lua.hpp luajit.h /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/include/luajit-2.1
cd src/jit && install -m 0644 bc.lua bcsave.lua dump.lua p.lua v.lua zone.lua dis_x86.lua dis_x64.lua dis_arm.lua dis_ppc.lua dis_mips.lua dis_mipsel.lua vmdef.lua /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/share/luajit-2.1.0-beta1/jit
ln -sf luajit-2.1.0-beta1 /root/ngx_openresty-1.9.7.1/build/luajit-root//opt/VeryNginx/luajit/bin/luajit
make: execvp: ln: Too many levels of symbolic links
make: *** [install] Error 127
ERROR: failed to run command: make install TARGET_STRIP=@: CCDEBUG=-g CC=cc PREFIX=/opt/VeryNginx/luajit DESTDIR=/root/ngx_openresty-1.9.7.1/build/luajit-root/
loveminds
    113
loveminds  
   2016-03-17 21:54:59 +08:00
你这模块绑定 127.0.0.1 ,感觉这个设计本身就是不合理
要么通过 nginx 二次转发,要么通过其他工具转发
HanSonJ
    114
HanSonJ  
   2016-04-17 11:41:42 +08:00
想问一下如何通过外部 IP 访问而不是 localhost 呢?
AlexaZhou
    115
AlexaZhou  
OP
   2016-04-17 11:45:41 +08:00
@HanSonJ

本来就是可以通过外部 IP 访问的,使用部署到机器的 ip 地址访问就可以
只是安装文档中是部署到本机,所以使用了 localhost
HanSonJ
    116
HanSonJ  
   2016-04-17 12:01:19 +08:00
@AlexaZhou 谢了,可能是我服务器防火墙问题
abc123ccc
    117
abc123ccc  
   2016-07-27 10:14:22 +08:00
你搞得完美的话,会有人来打你官方网站的,该做的你都做了,让人家 kangle 杂活呀。
jhytxy
    118
jhytxy  
   2016-09-09 16:56:10 +08:00
为什么 rc.local 里加入 /opt/verynginx/openresty/nginx/sbin/nginx 没有运行呢
手动运行是 ok 的
linkerlin
    119
linkerlin  
   2016-11-04 14:32:42 +08:00
不能保存配置。
添加新用户或者改密码后,保存。再登录发现用户没加好,或者密码没改。
不知道是哪里不对?
notolddriver
    120
notolddriver  
   2019-01-04 17:29:40 +08:00
项目很棒。 但现在企业大部分都是多个 nginx 做负载均衡,所以前端页面只能管理一个 nginx 有点不实用- -
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2858 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms · UTC 14:58 · PVG 22:58 · LAX 06:58 · JFK 09:58
Developed with CodeLauncher
♥ Do have faith in what you're doing.