之前说了很多关于 Nginx 模块的内容,还有一部分非常重要的内容,那就是 Nginx 的变量。变量在 Nginx 中可以说无处不在,认识了解这些变量的作用和原理同样是必要的,下面几乎囊括了关于 Nginx 的所有变量,单独看起来可能比较枯燥,放心,后面依然有实战内容。
Nginx 的过滤模块是干啥用的?
上一篇文章我写了 Nginx 的 11 个阶段,很多人都说太长了。这是出于文章完整性的考虑的,11 个阶段嘛,一次性说完就完事了。今天这篇文章比较短,看完没问题。
过滤模块的位置
之前我们介绍了 Nginx 的 11 个阶段,在 content 阶段时,Nginx 会生成返回给用户的响应内容,对用户的响应内容,实际上还需要做再加工处理,Nginx 的过滤模块就是对响应内容进行再加工处理的。所以实际上过滤模块位于 content 阶段之后,log 阶段之前。
我们先来看一段配置指令:
1 | limit_req zone=req_one |
那么在这一段配置指令之下,会遵循怎样的请求流程呢?请看一下下面这张图:
LeetCode 之数组
Nginx 处理 HTTP 请求的 11 个阶段
Nginx 处理一个 HTTP 请求的全过程
前面给大家讲了 Nginx 是如何处理 HTTP请求头部的,接下来就到了真正处理 HTTP 请求的阶段了。先看下面这张图,这张图是 Nginx 处理 HTTP 请求的示意图,虽然简单,但是却很好的说明了整个过程。
- Read Request Headers:解析请求头。
- Identify Configuration Block:识别由哪一个 location 进行处理,匹配 URL。
- Apply Rate Limits:判断是否限速。例如可能这个请求并发的连接数太多超过了限制,或者 QPS 太高。
- Perform Authentication:连接控制,验证请求。例如可能根据 Referrer 头部做一些防盗链的设置,或者验证用户的权限。
- Generate Content:生成返回给用户的响应。为了生成这个响应,做反向代理的时候可能会和上游服务(Upstream Services)进行通信,然后这个过程中还可能会有些子请求或者重定向,那么还会走一下这个过程(Internal redirects and subrequests)。
- Response Filters:过滤返回给用户的响应。比如压缩响应,或者对图片进行处理。
- Log:记录日志。