54 Nginx的Gzip和sendfile的共存问题

54 Nginx的Gzip和sendfile的共存问题

54.1 回顾sendfile处理流程

image

1.客户端在浏览器输入网址,通过网络,将请求发送到服务端

2.服务端分为用户区、内核区,应用程序nginx在用户区,用户区想要读取磁盘,需要经过内核区接口的调用

3.用户区通过内核区sendfile()接口读取磁盘信息,将信息从磁盘拷贝(涉及第一次拷贝)到内核缓冲区

4.sendfile 函数中指定了将信息交给的Socket,因此可以直接在内核缓冲区将信息传递给Socket缓冲区

5.nginx再将Socket缓冲区的信息拷贝(涉及第二次拷贝)到网卡,网卡通过网络将信息发送回客户端

54.2 问题

1.使用sendfile() 后,文件不进入应用程序缓冲区,而是在内核区直接向外发送

2.gzip作用于应用程序区,无法对内核区文件进行压缩

54.3 gzip_static

使用 ngx_http_gzip_static_module 模块的 gzip_static 指令解决

gzip_static:检查与访问资源同名的 .gz 文件(例如:访问由 jquery.js 变为 jquery.js.gz), response 中以 gzip 相关的 header 返回 .gz 文件的内容

语法 gzip_static on | off | always;
默认值 gzip_static off;
位置 http 、server 、location

 

 

 

 

on:判断客户端浏览器是否支持压缩,支持启用、不支持不启用

off:不启用

always:不管客户端浏览器是否支持压缩,皆发送以资源同名的 .gz 文件

注意:使用 gzip_static 指令,需要添加 ngx_http_gzip_static_module 模块

 

———————————————————————————————————————————————————————————————————————————

                                                                                                                         无敌小马爱学习

posted on 2026-05-15 16:53  马俊南  阅读(3)  评论(0)    收藏  举报