基本配置指令
openresty基本指令:
1 | lua_package_path "$prefix/service/?.lua;;"; |
2 | lua_package_cpath "$prefix/service/lib/?.so;;"; |
上面的指令告诉openresty在工作目录的service里查找lua库和so库
当然我们在安装openresty的时候已经内置了自己的查找目录:
- /usr/local/openresty/lualib/?.lua
- /usr/local/openresty/site/lualib/?.lua
- /usr/local/openresty/lualib/?.so
- /usr/local/openresty/site/lualib/?.so
1 | lua_code_cache on | off |
这个指令会启用openresty的lua代码缓存功能,源码文件会在LuaVM加载后就会被缓存起来,仅会读取一次,减少磁盘读写加快运行速度。默认on,只有在调试程序的时候可以设置为off,“init_by_lua_file/init_worker_lua_file”加载lua代码无法生效(都是启动的时候一次生效)。
运行机制
web服务的整个生命周期的请求处理流程清晰地划分出了若干阶段
- initing 服务启动,工作通常是读取配置文件,初始化内部数据结构
- running 服务运行,接受客户端的请求,返回响应结果
- exiting 服务停止,做一些必要的清理工作,如关闭监听端口
openresty目前只关注initing和running这两个阶段
- configuration 读取配置文件,解析配置指令,这只运行参数
- master-initing 配置文件解析完毕,master进程初始化公用的数据
- worker-initing worker进程自己初始化,进程专用的数据
running阶段,收到客户端请求后,openresty对每个请求使用一个专用的流水线处理
- ssl SSL/TLS安全通信和验证
- preread 在正式处理之前“预读”数据,接受http请求头
- rewrite 检查、改写uri,实现跳转/重定向
- access 访问权控制
- content 产生响应内容
- filter 对content阶段产生的内容进行过滤加工处理
- log 请求处理完毕,记录日志,或者其他收尾工作
执行程序
- init_by_lua master-initing阶段,初始化全局配置或模块
- init_worker_by_lua worker-initing阶段,初始化进程专用功能
- ssl_certificate_by_lua ssl阶段,在握手时设置整数
- set_by_lua rewrite阶段,改写nginx变量
- rewrite_by_lua rewrite阶段,改写uri,实现跳转/重定向
- access_by_lua access阶段,访问控制或限速
- content_by_lua content阶段,产生响应内容
- balancer_by_lua content阶段,反向代理时选择后端服务器
- header_filter_by_lua filter阶段,加工处理响应头
- body_filter_by_lua filter阶段,加工处理响应体
- log_by_lua log阶段,记录日志或其他的收尾工作
这些指令通常有三种形式:
- xxx_by_lua 执行字符串形式的lua代码
- xxx_by_lua_block 功能相同,但指令后是{…}的lua代码块
- xxx_by_lua_file 功能相同,但执行磁盘上的源码文件
1 | ngx.get_phase 以字符串的形式返回当前代码所在的阶段 |
2 | |
3 | rewrite_by_lua_block { |
4 | assert(ngx.get_phase() == "rewrite") -- 获取当前所在的处理阶段 |
5 | } |
定时任务
openresty使用定时器来周期性执行后台任务,需要以“ngx.timer.*”的功能接口形式使用