Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是{
post-read、[Nginx 读取并解析完请求头(request headers)之后就立即开始运行
server-rewrite、[server请求地址重写阶段
find-config、[配置查找阶段,用来完成当前请求与location配置块配对
rewrite、[location请求地址重写阶段,当ngx_rewrite指令用于location中,就是再这个阶段运行的;
post-rewrite、[对rewrite阶段的多次重写 做一次内不跳转 到 find-config阶段
preaccess、[访问权限检查准备阶段
access、[权限检查阶段,ngx_access在这个阶段运行,配置指令多是执行访问控制相关的任务,如检查用户的访问权限,检查用户的来源IP是否合法
post-access、[主要用于配合 access 阶段实现标准 ngx_http_core 模块提供的配置指令 satisfy 的功能 访问权限检查提交阶段
try-files、[配置项try_files处理阶段
content、[内容产生阶段,是所有请求处理阶段中最为重要的阶段,因为这个阶段的指令通常是用来生成HTTP响应内容的
log、[日志模块处理阶段
}
rewrite、access 和 content 这三个最为常见的 Nginx 请求处理阶段
ngx.lua的运行阶段
init_by_lua http
set_by_lua server, server if, location, location if
rewrite_by_lua http, server, location, location if
access_by_lua http, server, location, location if
content_by_lua location, location if
header_filter_by_lua http, server, location, location if
body_filter_by_lua http, server, location, location if
log_by_lua http, server, location, location if
{
set_by_lua: 流程分支处理判断变量初始化
rewrite_by_lua: 转发、重定向、缓存等功能(例如特定请求代理到外网)
access_by_lua: IP准入、接口权限等情况集中处理(例如配合iptable完成简单防火墙)
content_by_lua: 内容生成
header_filter_by_lua: 应答HTTP过滤处理(例如添加头部信息)
body_filter_by_lua: 应答BODY过滤处理(例如完成应答内容统一成大写)
log_by_lua: 会话完成后本地异步完成日志记录(日志可以记录在本地,还可以同步到其他机器)
}
post-read:{
set_real_ip_from 127.0.0.1;
real_ip_header X-My-IP;
location /test {