openresty简介
简述: openresty 功能强大,Lua脚本很丰富,强力推荐。
简介
支持丰富的 lua 插件,可以实现一些业务附加功能。
我实践过的一些功能,如:
- 自定义拦截规则,做黑白名单。比如给一个IP进行计数,2分钟内访问错误路径n次后屏蔽10分钟。
- 读写 redis,实现配置的动态更新。如做接口白名单的更新;
- 收到请求时调用其它URL接口,进行鉴权
- 动态页面渲染,例如文章一些简单动态内容,如访问计数,用户状态这些简单的逻辑让客户端单独再发起n次调用没啥必要,直接服务器端渲染。
- 自定义日志格式,如在日志中附加请求报文中的某个字段内容。
- 加解密。之前我们有一个web接口post的报文是加密的, 需要根据内容的某个字段进行手动路由, 转到不同数据中心。
关于性能
有人担心性能,其实不需要太担心的;
考虑点有几个
- 服务器内部之间的调用,肯定比客户端过来得快
- lua性能很强,简单规则对性能基本毫无影响
- 复杂功能更多是属于临时性的快速应急措施,后期还是建议挪到后端
安装
# 下载
wget https://openresty.org/download/openresty-1.15.8.2.tar.gz
# 准备环境
yum install pcre-devel openssl-devel
# 解压
tar xf openresty-1.15.8.2.tar.gz && cd openresty-1.15.8.2
# 编译
./configure \
--prefix=/opt/app/openresty \
--with-pcre-jit \
--with-threads \
--with-http_v2_module \
--with-http_auth_request_module \
--with-http_stub_status_module \
gmake && gmake install
# 启动
/opt/app/openresty/bin/openresty核心功能
相比nginx最主要的就是增加了 lua, lua支持里面不得不说的关键就是它的运行阶段; 理解为一个功能应该放置在那个阶段运行才有效;
例如处理日志文件格式,肯定是要在其它各流程都处理完成后才进行
xxx_lua_block 表示代码块, 即写在配置文件里面的; xxx_lua_file 表示外部lua代码文件
init_by_lua_* http
当 Nginx 的 master 进程加载或重新加载 Nginx 配置文件时运行
init_worker_by_lua_* http
worker 进程启动时挂载的 lua 代码
set_by_lua_* server, server if, location, location if
设置一个变量, 常用与计算一个逻辑, 然后返回结果
rewrite_by_lua_* http, server, location, location if
在 access 阶段前运行, 主要用于 rewrite
access_by_lua_* http, server, location, location if
主要用于访问控制, 能收集到大部分变量
content_by_lua_* location, location if
内容处理器, 接收请求处理并输出响应
此阶段是所有请求处理阶段中最为重要的一个, 一般可以在这里给客户端进行响应内容
header_filter_by_lua_* http, server, location, location if
一般只用于设置 Cookie 和 Headers 等
body_filter_by_lua_* http, server, location, location if
与前面的 content_by_lua_ 看起来冲突, 但实际这里的用途一般为 流式响应用的
即多次给客户端响应内容时
log_by_lua_* http, server, location, location if
处理结束后的日志阶段
balancer_by_lua_* upstream
Lua 负载均衡器
lua_need_request_body http, server, location, location if
处理 request body
ssl_certificate_by_lua_* server
ssl_session_fetch_by_lua_* http
ssl_session_store_by_lua_* http最后更新于