今天,咱们来聊聊怎么给Nginx装上个“美颜滤镜”,让它能够随心所欲地打扮那些发给客户端的响应内容。
1. 初识Nginx过滤模块:不仅仅是流量指挥
Nginx之所以强大,很大程度上得益于其高度模块化的设计。从结构上分,Nginx分为核心模块、基础模块和第三方模块;而从功能上分,则可分为Handlers(处理器模块)、Filters(过滤器模块)和Proxies(代理类模块)。
简单来说,Handlers负责处理请求并生成响应内容,Filters则对响应内容进行加工处理,而Proxies则负责与后端服务交互,实现代理和负载均衡。
这其中,过滤模块就像是Nginx生产线上的质量检测员,对即将出厂的产品(响应内容)进行最后的包装和调整。
1.1 过滤模块的工作原理
过滤模块在Nginx处理流程中的位置非常特殊——它在服务器准备好响应内容之后,在将内容发送给客户端之前工作。想象一下,它就像是快递公司在包裹发出前的最后一道检查工序,确保包裹外观整洁、内容完整。
过滤模块的处理过程分为两个阶段:
- HTTP响应头过滤:对响应头部进行处理
- HTTP响应体过滤:对响应主体内容进行处理
这两个阶段分别由两个不同的函数完成:
ngx_http_top_header_filter(r); // 头部过滤函数
ngx_http_top_body_filter(r, in); // 主体过滤函数
1.2 过滤模块的执行顺序
在Nginx中,过滤模块的执行顺序是在编译时就决定的。当你编译完Nginx后,可以在objs目录下看到一个ngx_modules.c的文件,里面有一个ngx_modules数组,所有模块的执行顺序就由此决定。
有趣的是,过滤模块的执行顺序是反向的——最早执行的过滤模块在数组的最后,而最后执行的却在数组的前面。这就像是排队买票,最后来的人反而最先买到票(如果队伍是反向的话)。
以下是Nginx自带的一些过滤模块及其执行顺序(部分):
| 过滤模块 |
功能描述 |
| ngx_http_not_modified_filter_module |
检查缓存,返回304 |
| ngx_http_range_body_filter_module |
处理range请求 |
| ngx_http_copy_filter_module |
将文件内容读到内存 |
| ngx_http_headers_filter_module |
设置expire和Cache-control头 |
| ngx_http_userid_filter_module |
添加统计用户cookie |
| ngx_http_charset_filter_module |
字符集转换 |
| ngx_http_ssi_filter_module |
处理SSI请求 |
| ngx_http_gzip_filter_module |
压缩内容 |

最低0.47元/天 解锁文章
1361

被折叠的 条评论
为什么被折叠?



