Lua 是由巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于1993年开发的一种轻量、小巧的脚本语言,用标准 C 语言编写,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
官网:http://www.lua.org/
4.2、IDE
https://github.com/bungle/lua-resty-template
如果学习过JavaEE中的servlet和JSP的话,应该知道JSP模板最终会被翻译成Servlet来执行;
而lua-resty-template模板引擎可以以为是JSP,其最终会被翻译成Lua代码,然后通过ngx.print输出。
lua-resty-template大体内容有:
l 模板位置:从那边查找模板;
l 变量输出/转义:变量值输出;
l 代码片段:执行代码片段,完成如if/else、for等复杂逻辑,调用对象函数/方法;
l 注释:解释代码片段含义;
l include:包含另一个模板片段;
l 其他:lua-resty-template还提供了不需要剖析片段、简朴布局、可复用的代码块、宏指令等支持。
底子语法
l {(include_file)}:包含另一个模板文件;
l {* var *}:变量输出;
l {{ var }}:变量转义输出;
l {% code %}:代码片段;
l {# comment #}:注释;
l {-raw-}:中心的内容不会剖析,作为纯文本输出;
6.1、lua代码热加载
https://github.com/unixhot/waf
https://github.com/loveshell/ngx_lua_waf
l 防止 SQL 注入,本地包含,部分溢出,fuzzing 测试,XSS/SSRF 等 Web 攻击
l 防止 Apache Bench 之类压力测试工具的攻击
l 屏蔽常见的扫描黑客工具,扫描器
l 屏蔽图片附件类目录执行权限、防止 webshell 上传
l 支持 IP 白名单和黑名单功能,直接将黑名单的 IP 访问拒绝
l 支持 URL 白名单,将不需要过滤的 URL 进行界说
l 支持 User-Agent 的过滤、支持 CC 攻击防护、限定单个 URL 指定时间的访问次数
l 支持支持 Cookie 过滤,URL 与 URL 参数过滤
l 支持日志记录,将所有拒绝的操作,记录到日志中去
7.2、Kong 基于Openresty的流量网关
https://konghq.com/
https://github.com/kong/kong
Kong 基于 OpenResty,是一个云原生、快速、可扩展、分布式的微服务抽象层(Microservice Abstraction Layer),也叫 API 网关(API Gateway),在 Service Mesh 里也叫 API 中心件(API Middleware)。
Kong 开源于 2015 年,核心代价在于高性能和扩展性。从环球 5000 强的构造统计数据来看,Kong 是如今依然在维护的,在生产环境使用最广泛的 API 网关。
Kong 宣称本身是世界上最盛行的开源微服务 API 网关(The World’s Most Popular Open Source Microservice API Gateway)。
核心优势:
l 可扩展:可以方便的通过添加节点水平扩展,这意味着可以在很低的延迟下支持很大的体系负载。
l 模块化:可以通过添加新的插件来扩展 Kong 的能力,这些插件可以通过 RESTful Admin API 来安装和配置。
l 在任何底子架构上运行:Kong 可以在任何地方都能运行,比如在云或肴杂环境中部署 Kong,单个或环球的数据中心。
7.3、APISIX
7.4、ABTestingGateway
https://github.com/CNSRE/ABTestingGateway
ABTestingGateway 是一个可以动态设置分流策略的网关,关注与灰度发布相干范畴,基于 Nginx 和 ngx-lua 开发,使用 Redis 作为分流策略数据库,可以实现动态调理功能。
ABTestingGateway 是新浪微博内部的动态路由体系 dygateway 的一部分,如今已经开源。在以往的基于 Nginx 实现的灰度体系中,分流逻辑往往通过 rewrite 阶段的 if 和 rewrite 指令等实现,长处是性能较高,缺点是功能受限、容易堕落,以及转发规则固定,只能静态分流。ABTestingGateway 则接纳 ngx-lua,通过启用 lua-shared-dict 和 lua-resty-lock 作为体系缓存和缓存锁,体系得到了较为接近原生 Nginx 转发的性能。
l 支持多种分流方式,如今包罗 iprange、uidrange、uid 尾数和指定uid分流
l 支持多级分流,动态设置分流策略,即时见效,无需重启
l 可扩展性,提供了开发框架,开发者可以灵活添加新的分流方式,实现二次开发
l 高性能,压测数据接近原生 Nginx 转发
l 灰度体系配置写在 Nginx 配置文件中,方便管理员配置
l 实用于多种场景:灰度发布、AB 测试和负载均衡等