Nginx基础教程(46)Nginx HTTP请求处理之开发filter模块:Nginx过滤模块开发:给响应内容“美颜”的魔法

今天,咱们来聊聊怎么给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

压缩内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值