对人类友好并且强大的 VeryNginx

2016-02-03 22:36:46 +08:00
 AlexaZhou

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

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

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

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

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

VeryNginx = Very powerful and friendly nginx

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

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

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

主要功能如下:

Nginx 运行状态分析

请求过滤

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

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

访问统计

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

附一张 VeryNginx 的界面图

欢迎大家试用~

27072 次点击
所在节点    分享创造
120 条回复
lhbc
2016-02-04 01:16:34 +08:00
@wph95 我觉得单节点数据持久化意义不大。
可以实现 demo.nginx.com 的功能后,把数据存储到 Redis ,然后 Redis 做同步,持久化由一个集中的 Redis 来实现。
AlexaZhou
2016-02-04 01:20:00 +08:00
@wph95
目前还不能呢,因为目前的实现主要是考虑了性能,目前的状态曲线是前端代码对不断获取 VeryNginx 的状态值(类似一个计数器),然后作差分计算得到的,查看历史纪录的话需要在 Nginx 里面做一个存储,也就是你说的时间序列数据库,会有一些难度(做的对性能基本无影响的情况下)

另外我感觉查看历史流量,是不是在通过 access.log 日志来分析会更好一些,因为那里面包含所有的原始信息,不光可以查看大概的指标例如每秒请求数,还可以查看单个请求的响应时间,返回值,等等,进行具体分析
AlexaZhou
2016-02-04 01:26:36 +08:00
@wph95
😊欢迎 PR ~
robinluoxx
2016-02-04 01:48:38 +08:00
已 star
znoodl
2016-02-04 08:10:47 +08:00
支持楼主
KenGe
2016-02-04 08:46:21 +08:00
提供下脚本自行安装配置蛮好
重新安装成本太高

我已经去试用了~
mjever
2016-02-04 09:18:49 +08:00
支持楼主,很有实用价值!
imria
2016-02-04 09:34:58 +08:00
准备体验下,希望楼主继续做下去
ltye
2016-02-04 09:50:12 +08:00
基于 openrestry ,提供 web 界面,赞!已经 star ,打算先在测试环境试试
adeweb
2016-02-04 09:58:28 +08:00
已 star ,很实用!
外行弱弱地问下,我理解的,如果改 nginx 配置是需要重启服务的,你是怎么做到热配置的?
sinux
2016-02-04 10:10:56 +08:00
好东西,有实用性
wudanyang
2016-02-04 10:34:36 +08:00
VeryNginx 预置了常用的过滤规则,可以一定程序上阻止常见的 SQL 注入, Git , SVN 文件泄露,目录遍历攻击,并拦截常见的扫描工具。
=============
上面是楼主的原文,我觉得有个错别字,可以一定程度上组织常见的 SQL 注入
wudanyang
2016-02-04 10:35:05 +08:00
不好意思,阻止
rrfeng
2016-02-04 10:45:55 +08:00
赞!想写来着但是一直没机会(其实是不会)
AlexaZhou
2016-02-04 10:49:29 +08:00
@KenGe

试用的时候如果有建议,或者遇到问题记得提 issue 给我🐶
AlexaZhou
2016-02-04 10:51:18 +08:00
@imria

会继续开发啦
VeryNginix 基于 lua ,比 Nginx 的 C 灵活很多,后续会加入很多新功能进来
AlexaZhou
2016-02-04 10:56:30 +08:00
确实是,多谢提醒,已经修正啦
fy
2016-02-04 11:14:54 +08:00
coooooooooool 希望有带宽限制这样的功能,注入过滤我觉得倒不是很必要,这种事情有专业的模块做了
rrfeng
2016-02-04 11:45:32 +08:00
用上了,但是感觉还有很大改进余地。
比如 tps 的曲线应该是 all 和 4xx 5xx , 2xx 没啥用嘛~

访问统计里 uri 应该支持用正则过滤,不然好多没法区分的。(另外这部分是存在哪里的? shard dict ?还没仔细看代码)

response time 是总和值而不是平均值……
AlexaZhou
2016-02-04 12:03:55 +08:00
@rrfeng

后续 uri 访问统计里面会支持按照正则表达式进行归类,这样相似的 uri 就可以合并成一条了,你觉得这种实现怎样?

另外统计结果里面的 avg time 就是平均响应时间

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/255284

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX