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:记录日志
热门推荐
研究生扩招:助力经济复苏的双刃剑
在职进修考研,职场进阶秘籍
公立三甲医院种植牙:技术实力与成功案例解析
为什么只有客家人自称客家?从历史迁徙到文化认同的演变
哪些生活习惯有助于预防肺气肿
日常这5个因素容易引起肺气肿,出现5个症状,及时去医院做检查!
电投产融重组新动向:电投核能入局
电投产融并购案:央企整合新标杆
电投产融并购电投核能,打造A股第三大核电巨头
邓紫棋在抖音上最火的三首歌!揭秘邓紫棋最火三首歌曲背后的音乐魅力
享受美食盛宴,红烧鱼的独特魅力(用传统手法烹制)
红烧鱼制作技巧:完美解决煎鱼粘锅难题
比特币黄金定价逻辑存差异
“老资格”的辛伐他汀,降脂强度并不高,为什么一直在用?
绝美宁波行:四明山自驾探险,雪窦山祈福静心,一日游全攻略!
个体户老板欠员工工资不给怎么办
去劳动局告拖欠工资有哪些程序
新工科教育:破解“工科理科化”困局的新路径
农村别墅窗户设计全攻略:采光通风与美观兼顾
不在城里买房的工薪族,花100万在村里盖房
蛇纹木是什么木,蛇纹木和小叶紫檀哪个贵?
自制玉米饵料,让你秒变钓鱼达人
自制环保饵料,守护我们的水域家园
自制玉米饵料,轻松钓到大鲤鱼
如何提升孩子的自我保护意识?
社交场合中的自我保护:从意识提升到实践指南
维生素C:食品保鲜的秘密武器
维生素C护肤全攻略:美白抗氧化两不误
维生素C与感冒:从预防到治疗的科学解读
心脏手术后吃什么补品对身体最好