47 Nginx静态资源优化配置之sendfile

47 Nginx静态资源优化配置之sendfile

Nginx 对静态资源进行优化配置,主要基于属性配置进行优化:

sendfile on;
tcp_nopush on;
tcp_nodeplay on;

47.1 sendfile指令

sendfile:开启高效的文件传输模式

语法 sendfile on | off;
默认值 sendfile off;
位置 http 、 server 、location ...

 

 

 

 

请求静态资源的过程:客户端通过网络接口向服务端发送请求,操作系统将这些客户端的请求通过网络传递给服务端应用程序,服务器端应用程序会处理这些请求,请求处理完成以后,操作系统还需要将处理得到的结果通过网络原路传递回去

47.2 链路图对比 

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

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

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

4.nginx读取要在用户区,所以会再将内核缓冲区的信息拷贝(涉及第二次拷贝)到应用程序缓冲区

5.nginx拿到信息后,通过Socket缓冲区write()接口将应用缓冲区的信息拷贝(涉及第三次拷贝)到内核网络层的Socket缓冲区

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

1587665814562

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

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

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

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

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

 

总结:使用sendfile参数,减少两次拷贝和两次内核区与用户区交互的过程

 

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

                                                                                                                         无敌小马爱学习

posted on 2026-05-12 23:10  马俊南  阅读(9)  评论(0)    收藏  举报