Jusene's Blog

OpenResty开发概述

字数统计: 750阅读时长: 2 min
2019/09/02 Share

基本配置指令

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.*”的功能接口形式使用

CATALOG
  1. 1. 基本配置指令
  2. 2. 运行机制