对人类友好并且强大的 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 的界面图

欢迎大家试用~

27046 次点击
所在节点    分享创造
120 条回复
AlexaZhou
2016-02-03 23:47:55 +08:00
@lhbc 另外 VeryNginx 运行需要有 http_sub_status_module 和 lua_nginx_module ,还有 lua cjson 模块,你需要检查一下这几个模块是不是都有,不然运行会有问题
popu111
2016-02-03 23:49:20 +08:00
@AlexaZhou 支持对运维绳命有益的项目是应该的~
liuchen9586
2016-02-03 23:55:44 +08:00
支持,自己用会很爽
lhbc
2016-02-03 23:56:35 +08:00
@AlexaZhou 感谢,这些模块都有的
另外可以参考这个来规划 todo
http://demo.nginx.com/status.html
kn007
2016-02-03 23:57:14 +08:00
不用 openrestry 的话,需要安装那些扩展?
wph95
2016-02-03 23:59:49 +08:00
非常棒,已经 star
如果能优化安装流程,再傻瓜化一些就好了。
强力关注
AlexaZhou
2016-02-04 00:00:40 +08:00
@lightforce
额你是说对访问速度的影响,还是读取统计结果时候的影响?
对普通访问来说,日志统计的插入时间复杂度是 o(1),不怎么耗 cpu
读取统计结果的时候会需要生成 json ,数据很多的情况下(应该可以记录 10 万条以上的 url 统计结果),需要零点几秒,但是也还好
AlexaZhou
2016-02-04 00:04:26 +08:00
@kn007 目前需要有:

http_sub_status_module
lua_nginx_module
以及 lua cjson 模块

不过这里面的 lua cjson 模块并不是必须的,后面会改进成动态判断,如果有就使用 cjson ,如果不存在则使用 dkjson 来代替
jinwyp
2016-02-04 00:05:18 +08:00
没有反向代理的 和 虚拟主机的配置? 最主要的功能没有?
AlexaZhou
2016-02-04 00:05:31 +08:00
@lhbc 强力赞~ 这个很有参考价值
AlexaZhou
2016-02-04 00:07:22 +08:00
@jinwyp
遇到了 Nginx 本身的一些限制,目前这两个还是需要通过 Nginx 本身的配置文件来写
AlexaZhou
2016-02-04 00:11:36 +08:00
@wph95
多谢鼓励 ~
必须要做成方便部署的方式
kn007
2016-02-04 00:30:28 +08:00
@AlexaZhou 好的,谢谢。
期待后续版本。
wph95
2016-02-04 00:42:58 +08:00
@AlexaZhou
刚部署起来用 感觉非常的好,不过遇到几个问题。
1. vuejs 的用法有点怪怪的。。 可以参考 vue-cli
2. 刚开始没找到 默认账户密码,翻了源码后才找到。。
后来仔细的看 readme 才在最底下发现。。。
readme 用中英混写 看起来很不顺服,不如一个中文的 一个英文的
3. 要是每个数据点能设置成 每秒 每 15 秒 每 60 秒 etc 就好了,使用上像 grafana 就完美了
4. 期待能实现更多功能 http://demo.nginx.com/ 实现的功能都特别适用
wph95
2016-02-04 00:45:02 +08:00
@AlexaZhou &人比较大胆,直接扔到自己一个几千用户的项目的生产环境里, verynginx 的性能损耗有多大,这个还是需要测一下才放行。。。
lightforce
2016-02-04 00:46:25 +08:00
@AlexaZhou 对系统性能的影响,日志一直在滚的站对单点服务器 cpu 很考验。。。这方面有测试数据吗?
AlexaZhou
2016-02-04 00:57:30 +08:00
@wph95
1 ,额,第一次用 vue.js ,我回头再研究一下
2 ,看来 Readme 很需要改进...
3 ,关于数据点时间间隔,其实在 status 页面点右边的齿轮,然后可以设置数据点的时间间隔,目前是只能在 1-15 s 内设置
4 ,正在加油中,陆续会加功能进来...
AlexaZhou
2016-02-04 01:00:55 +08:00
@wph95
赞大胆~
如果生产中使用时遇到任何问题,请反馈给我,我会尽快解决👿
AlexaZhou
2016-02-04 01:05:49 +08:00
@lightforce

首页的曲线图,其实是前端本地拿两个时间点的累计信息,作差分计算得到的,对服务器可以说无压力
访问统计那一页读取 uri 的访问记录,会需要 nginx 计算一下生成 json ,但也还好

可能存在的性能压力是在配置了很多规则之后,正则表达式匹配可能会带来 cpu 压力
wph95
2016-02-04 01:07:02 +08:00
@AlexaZhou
怒赞,明天起来帮忙理下 vue 推个 PR :)
期待能早日看到 http://demo.nginx.com/ 里的功能都实现掉了的一天。
哦对了,数据能持久化(备份)吗,能查看历史记录就好了(估计得上个 时间序列数据库才行)。

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

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

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

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

© 2021 V2EX