文章目录
OpenResty基Nginx,把Web服务的整个生命周期和请求处理流程分为如下几个阶段:
处理阶段
Web服务的生命周期分为三个阶段:
- initing : 服务启动,通常是读取配置文件,初始化内部数据结构;
- running : 服务运行,接收客户端的请求,返回响应结果;
- exiting : 服务停止,做一些必要的清理工作。
OpenResty关注的是initing和running两个阶段,并做了更细致的划分。
initing阶段在OpenResty里分为三个子阶段:
- configuration : 读取配置文件,解析配置指令,设置运行参数;
- master-initing : 配置文件解析完毕,master进程初始化公用数据;
- worker-initing : worker进程的初始化。
在running阶段,OpenResty会按照如下流程来处理:
- ssl : SSL / TLS 安全通信和验证
- preread : 在正式处理之前“预读”数据,接收 HTTP 请求头
- rewrite : 检查、改写 URI,实现跳转/重定向
- access : 访问权限控制:
- content : 产生响应内容
- filter : 对 content 阶段产生的内容进行过滤加工处理
- log : 请求处理完毕,记录日志,或者其他的收尾工作
关系图如下:
执行程序
对应于上述处理阶段,OpenResty提供了一系列的”xxx_by_lua”的指令:
- init_by_lua : master-initing阶段,初始化全局配置或模块
- init_work_by_lua : worker-initing阶段, 初始化进程专用功能
- ssl_session_fetch_by_lua : ssl阶段,读取session
- ssl_certificate_by_lua : ssl阶段,在“握手”时设置安全证书
- ssl_session_store_by_lua : ssl阶段,存储session
- 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阶段,记录日志或其他收尾工作
流程图
参考文献:
- 罗剑锋 《OpenResty完全开发指南-构建百万级别并发的Web应用》 电子工业出版社 ISBN 978-7-121-34896-9