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 ...
随机推荐
- ZUK Z2 AospExtended-v6.7 Android 9.0可用的谷歌相机Mod.md
目录 参考资料 系统版本: AospExtended-v6.7-z2_plus-20190821-1940-OFFICIAL.zip cstark27 ×PXv4.1.1_GoogleCamera_7 ...
- MATLAB学习(六)绘图图形功能
>> x=0:.1:2*pi;plot(x,sin(x),x,cos(x)) >> plot(x,sin(x),'p ...
- k8s local volume 和host path volume的区别
k8s提供多种volume接口,其中local 和host path是容易混淆的两个接口.下面这篇文章解释了两者的区别: https://groups.google.com/forum/#!topic ...
- 树莓派上安装Samba实现树莓派与Windows间的文件共享
我是参考这篇文章的: https://www.jianshu.com/p/ead92b06318e 安装samba和common-bin库(具有smbpasswd效用) sudo apt-get in ...
- cmake 在mac系统的安装
CMake是一个比make更高级的跨平台的安装.编译.配置工具,可以用简单的语句来描述所有平台的安装(编译过程).并根据不同平台.不同的编译器,生成相应的Makefile或者project文件.本文主 ...
- LeetCode.1185-一周中的星期几(Day of the Week)
这是小川的第415次更新,第448篇原创 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第266题(顺位题号是1185).给定日期,返回该日期的星期几.输入为三个整数,分别代表日,月和 ...
- 启动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包. 解决办法 ...
- 【并行计算-CUDA开发】Apple's OpenCL——再谈Local Memory
在OpenCL中,用__local(或local)修饰的变量会被存放在一个计算单元(Compute Unit)的共享存储器区域中.对于nVidia的GPU,一个CU可以被映射为物理上的一块SM(Str ...
- android简易计算器
activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...
- 基于hanlp的es分词插件
摘要:elasticsearch是使用比较广泛的分布式搜索引擎,es提供了一个的单字分词工具,还有一个分词插件ik使用比较广泛,hanlp是一个自然语言处理包,能更好的根据上下文的语义,人名,地名,组 ...