OpenResty 执行流程阶段详解
创作时间:
作者:
@小白创作中心
OpenResty 执行流程阶段详解
引用
1
来源
1.
https://mbpolis.com/blog/36
OpenResty是一个基于Nginx和Lua的高性能Web平台,它允许开发者使用Lua脚本语言来扩展Nginx的功能。在OpenResty中,Nginx的处理流程被细分为多个阶段,每个阶段都可以通过Lua指令进行定制和扩展。本文将详细介绍这些处理阶段及其应用场景。
Nginx有11个处理阶段,如下图所示:
指令 | 所处处理阶段 | 使用范围 | 解释 |
---|---|---|---|
init_by_lua init_by_lua_file | loading-config | http | Nginx Master进程加载配置时执行;通常用于初始化全局配置/预加载Lua模块 |
init_worker_by_lua init_worker_by_lua_file | starting-worker | http | 每个Nginx Worker进程启动时调用的计时器,如果Master进程不允许则只会在init_by_lua之后调用;通常用于定时拉取配置/数据,或者后端服务的健康检查 |
set_by_lua set_by_lua_file | rewrite | server,server if,location,location if | 设置nginx变量,可以实现复杂的赋值逻辑;此处是阻塞的,Lua代码要做到非常快 |
rewrite_by_lua rewrite_by_lua_file | rewrite tail | http,server,location,location if | rewrite阶段处理,可以实现复杂的转发/重定向逻辑 |
access_by_lua access_by_lua_file | access tail | http,server,location,location if | 请求访问阶段处理,用于访问控制 |
content_by_lua content_by_lua_file | content | location,location if | 内容处理器,接收请求处理并输出响应 |
header_filter_by_lua header_filter_by_lua_file | output-header-filter | http,server,location,location if | 设置header和cookie |
body_filter_by_lua body_filter_by_lua_file | output-body-filter | http,server,location,location if | 对响应数据进行过滤,比如截断、替换 |
log_by_lua log_by_lua_file | log | http,server,location,location if | log阶段处理,比如记录访问量/统计平均响应时间 |
指令解释
- init_by_lua:初始化 nginx 和预加载 lua(nginx 启动和 reload 时执行);
- init_worker_by_lua:每个工作进程(worker processes)被创建时执行,用于启动一些定时任务,比如心跳检查,后端服务的健康检查,定时拉取服务器配置等;
- ssl_certificate_by_lua:对 https 请求的处理,即将启动下游 SSL(https)连接的 SSL 握手时执行,用例:按照每个请求设置 SSL 证书链和相应的私钥,按照 SSL 协议有选择的拒绝请求等;
- set_by_lua:设置 nginx 变量;
- rewrite_by_lua:重写请求(从原生 nginx 的 rewrite 阶段进入),执行内部 URL 重写或者外部重定向,典型的如伪静态化的 URL 重写;
- access_by_lua:处理请求(和 rewrite_by_lua 可以实现相同的功能,从原生 nginx 的 access 阶段进入);
- content_by_lua:执行业务逻辑并产生响应,类似于 jsp 中的 servlet;
- balancer_by_lua:负载均衡;
- header_filter_by_lua:处理响应头;
- body_filter_by_lua:处理响应体;
- log_by_lua:记录访问日志;
在实际开发过程中,常用的阶段包括:
set_by_lua、rewrite_by_lua、access_by_lua、content_by_lua、header_filter_by_lua、body_filter_by_lua、log_by_lua
- set_by_lua:做流程分支判断,判断变量初始化
- rewrite_by_lua:转发重定向,缓存功能
- access_by_lua:IP准入,接口合法权限判断,根据IP table做防火墙的功能
- content_by_lua:内容生产
- header_filter_by_lua:增加头部信息
- body_filter_by_lua:内容过滤
- log_by_lua:记录日志
热门推荐
什么是本质安全?本质安全的特点是什么?
明查|美国商务部以“国家安全”为由封杀电影《哪吒2》?
如何分析同比增减的数据变化?这种分析方法对市场趋势有什么参考意义?
土壤有效磷的测定方法详解:NH4F—HCl法与HCl—H2SO4法
稀释倍数怎么算?详细解释稀释倍数的计算方法
稀释倍数怎么算?详细解释稀释倍数的计算方法
Robocopy 使用指南:多线程复制、大文件传输与断点续传等
瑞典Piab真空发生器真空泵的原理与功能作用
贷款逾期法律援助:解答、处理、预防及救济全方位指南
工厂噪音怎么隔音的呢?你需要知道的三种隔音方法是什么?
巨有科技绿色旅游:可持续发展的旅游新模式
大学物理:机械波的全面解析
打破伤风针的危害有多大
揭秘霸王茶姬:网红茶饮背后的管理困境
应对与预防:套路贷款诈骗的全面策略
罗永浩还债记
数字化背景下汽车企业智能化转型策略研究——以比亚迪企业为例
天津跟团到杭州旅游攻略,杭州跟团五日游人均花销多少?建议码住
数字信号处理基础:什么是采样?
中国白酒十二大香型全解析:从浓香到馥郁,品味传统佳酿的独特魅力
生鲜如何规范化销售管理
皇位继承的传统法则:嫡长子与庶子的区别
政策风向标!雷军两会提案释放信号:2026年或成自动驾驶供应商分水岭
小龙虾很脏是误解,可以敞开吃了
怀孕期间脚部肿胀怎么办?这些实用建议请收好
春季锻炼指南:从项目选择到注意事项全攻略
卡罗拉汽车电量显示在哪里
多元时间序列分析——VAR(向量自回归模型)
热电偶:温度测量的原理与应用
“坤元”地理科学大模型功能及影响