openresty简介

nginx openresty 简介

简述: openresty 功能强大,Lua脚本很丰富,强力推荐。

简介

支持丰富的 lua 插件,可以实现一些业务附加功能。

我实践过的一些功能,如:

  1. 自定义拦截规则,做黑白名单。比如给一个IP进行计数,2分钟内访问错误路径n次后屏蔽10分钟。
  2. 读写 redis,实现配置的动态更新。如做接口白名单的更新;
  3. 收到请求时调用其它URL接口,进行鉴权
  4. 动态页面渲染,例如文章一些简单动态内容,如访问计数,用户状态这些简单的逻辑让客户端单独再发起n次调用没啥必要,直接服务器端渲染。
  5. 自定义日志格式,如在日志中附加请求报文中的某个字段内容。
  6. 加解密。之前我们有一个web接口post的报文是加密的, 需要根据内容的某个字段进行手动路由, 转到不同数据中心。

关于性能

有人担心性能,其实不需要太担心的;

考虑点有几个

  1. 服务器内部之间的调用,肯定比客户端过来得快
  2. lua性能很强,简单规则对性能基本毫无影响
  3. 复杂功能更多是属于临时性的快速应急措施,后期还是建议挪到后端

安装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 下载
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代码文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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

微信搜索IT运维小秋