OpenResty 执行流程阶段
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 | rrewrite阶段处理,可以实现复杂的转发/重定向逻辑; |
| 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阶段处理,比如记录访问量/统计平均响应时间 |
一般我们在开发过程中常用到的阶段如下:
set_by_lua、rewrite_by_lua、access_by_lua、content_by_lua、header_filter_by_lua、body_filter_by_lua、log_by_lua、
1.set_by_lua
做流程分支判断,判断变量初始化
2.rewrite_by_lua
转发重定向,缓存功能
3.access_by_lua
ip准入,接口合法权限判断,根据iptable做防火墙的功能
4.content_by_lua
内容生产
5.header_filter_by_lua
增加头部信息
6.body_filter_by_lua
内容过滤
7.log_by_lua
记录日志
OpenResty 执行流程阶段的更多相关文章
- openresty开发系列31--openresty执行流程
openresty开发系列31--openresty执行流程 我们先看个例子 location /test { set $a 32; echo $a; set $a 56; e ...
- OpenResty 执行阶段的概念和用途
主要还是 Nginx 的执行阶段知识了,都是因为 OR 才会那么深刻, 它有些自己的阶段. 主要还是参照 春哥的 Nginx 教程 请多读几遍,如果不清楚nginx的执行阶段就无法充分利用 openr ...
- MyBatis执行流程的各阶段介绍
目录 一.mybatis极简示例 1.1 创建mybatis配置文件 1.2 创建数据库表 1.3 创建javabean 1.4 创建mapper映射文件 1.5 运行测试 二.mybatis的几大“ ...
- 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来 ...
- Servlet执行流程和生命周期【慕课网搬】
Servlet执行流程(GET方式为例) 首先用户客户端浏览器发出Get方式(点击超链接方式)向浏览器发出请求. 服务器接收到客户端点击超链接,接收到GET请求之后,服务器到WEB.xml中<s ...
- PHP解释器引擎执行流程 - [ PHP内核学习 ]
catalogue . SAPI接口 . PHP CLI模式解释执行脚本流程 . PHP Zend Complile/Execute函数接口化(Hook Call架构基础) 1. SAPI接口 PHP ...
- Map/Reduce 工作机制分析 --- 作业的执行流程
前言 从运行我们的 Map/Reduce 程序,到结果的提交,Hadoop 平台其实做了很多事情. 那么 Hadoop 平台到底做了什么事情,让 Map/Reduce 程序可以如此 "轻易& ...
- ThinkPHP中的跨控制器调用与框架执行流程
一.跨控制器调用 UserController.class.php <?php namespace Home/Controller use Think/Controller class User ...
- Servlet、Struts2、SpringMVC执行流程
Servlet 有以下四个阶段: 1.加载和实例化 Servlet容器负责加载和实例化Servlet. 当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Ser ...
随机推荐
- [PySpark] Build R&D environment
开发环境 基本操作 Ref:Spark的环境搭建 一.启动集群 先启动hadoop,再启动spark,查看启动后的状态:http://node-master:8080 start-all.sh sta ...
- Spring MVC的多视图解析器配置及与Freemarker的集成
一.从freemarker谈起 Freemarker使用模板技术进行视图的渲染.自从看了Struts标签.Freemarker.JSTL的性能对比后,我毅然决定放弃Struts标签了!效率太差…… S ...
- jekins自动部署tomcat注意事项、连接tomcat报错
jekins自动部署tomcat注意事项 千万不要用下面插件推送,报错很多, 要用脚本,一篇博客说的:“我们都是用的脚本,插件报错太多,也不完善” Deploy to container Plugin ...
- 启动hive,提示ls: 无法访问/home/software/spark-2.0.1-bin-hadoop2.7/lib/spark-assembly-*.jar: 没有那个文件或目录
原因是:spark升级到spark2以后,原有lib目录下的大JAR包被分散成多个小JAR包,原来的spark-assembly-*.jar已经不存在,所以hive没有办法找到这个JAR包. 解决办法 ...
- deepin终端下载速度超慢解决方案
最近发现在deepin终端下载软件包时速度简直是慢到不可饶恕,最快速度不上20KB/s,哭了,这要下载个几百KB的还能忍,稍微下载个百内MB的包就得等1-2小时,这咋行! 在网上查了几篇博客后,终于找 ...
- Python Network Security Programming-1
UNIX口令破解1.程序运行需求: 其中dictionary.txt文件为破解口令的字典文件,passwords.txt文件为临时存放UNIX系统密码的文件 2.程序源码: import crypt ...
- MySQL_表数据操作
目录 1.添加数据 2.添加多条数据 3.更新数据 4. 删除数据 5.查看表数据 1.添加数据 insert into <表名>[<字段名>[,...]] values(&l ...
- es5实现map/filter
// ES5循环循环实现filter const selfFilter = function (fn, context) { let arr = Array.prototype.slice.call( ...
- PHP抽奖代码。亲测可用
$prize_arr = array( '0' => array('id' => 1, 'title' => 'iphone5s', 'v' => 5), '1' => ...
- linux ctrl 快捷键
ctrl+a: 光标跳到行首. ctrl+b: 光标左移一个字母. ctrl+c: 杀死当前进程. ctrl+d: 删除光标后一个字符或exit.logout. ctrl+e: 光标移到行尾. ctr ...