当前位置: 首页 > news >正文

分布式 - 服务器Nginx:基础系列之Nginx静态资源优化配置指令sendfile | tcp_nopush | tcp_nodelay

文章目录

      • 1. sendfile 指令
      • 2. tcp_nopush 指令
      • 3. tcp_nodelay 指令

1. sendfile 指令

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

在这里插入图片描述

sendfile 指令是用于将文件内容发送到客户端的指令。它可以让 Nginx 直接将文件内容发送给客户端,而不需要将文件内容先读入内存再发送。这样可以减少 CPU 和内存的使用,提高文件传输的效率。

sendfile 指令的语法如下:

sendfile on | off;

默认情况下,sendfile 指令是启用的。如果您想禁用它,可以将其设置为off。请注意,sendfile指令只适用于静态文件,对于动态生成的内容,仍然需要将其读入内存并通过Nginx发送。

2. tcp_nopush 指令

tcp_nopush 指令必须在 sendfile 打开的状态下才会生效,主要是用来提升网络包的传输效率。

① 语法:tcp_nopush on | off;

② 默认值:tcp_nopush off;

③ 作用:控制是否启用TCP的TCP_CORK选项(对应Linux内核选项),该选项用于延迟发送TCP数据包,直到缓冲区填满或者达到一定的时间阈值。当tcp_nopush设置为on时,表示启用TCP_CORK选项,Nginx会等待缓冲区填满后再发送数据包,以减少网络传输的次数,提高效率。当tcp_nopush设置为off时,表示禁用TCP_CORK选项,Nginx会立即发送数据包,适用于实时性要求较高的场景。

总结:当 tcp_nopush 设置为on时,Nginx 会将数据缓存起来,直到缓存区满或者达到一定的时间后再发送。这样可以减少发送的次数,提高传输效率。

3. tcp_nodelay 指令

tcp_nodelay 指令必须在keep-alive连接开启的情况下才生效,来提高网络包传输的实时性。

① 语法:tcp_nodelay on | off;

② 默认值:tcp_nodelay on;

③ 作用:控制是否启用TCP的TCP_NODELAY选项(对应Linux内核选项),该选项用于禁用Nagle算法,即禁止TCP延迟发送小数据包。当tcp_nodelay设置为on时,表示启用TCP_NODELAY选项,Nginx会立即发送小数据包,适用于实时性要求较高的场景。当tcp_nodelay设置为off时,表示禁用TCP_NODELAY选项,Nginx会等待一定时间或者缓冲区填满后再发送数据包,以减少网络传输的次数,提高效率。

总结:当 tcp_nodelay 设置为on时 ,Nginx 会立即发送数据,而不管数据量的大小。这样可以减少延迟,提高传输效率。

tcp_nopush 和 tcp_nodelay 看起来是"互斥的",那么为什么要将这两个值都打开?

三个指令都开启的好处是,sendfile可以开启高效的文件传输模式,tcp_nopush开启可以确保在发送到客户端之前数据包已经充分“填满”, 这大大减少了网络开销,并加快了文件发送的速度。 然后,当它到达最后一个可能因为没有“填满”而暂停的数据包时,Nginx会忽略tcp_nopush参数, 然后 tcp_nodelay 强制套接字发送数据。由此可知,TCP_NOPUSH可以与TCP_NODELAY一起设置,它比单独配置TCP_NODELAY具有更强的性能。

所以我们可以使用如下配置来优化Nginx静态资源的处理:

[root@192 conf]# cat nginx.conf
worker_processes  1;
events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile on;tcp_nopush on;tcp_nodelay on;server {listen 8080;server_name localhost;}
}
http://www.lryc.cn/news/154317.html

相关文章:

  • Sentinel配置的blockHandler方法不生效
  • Mybatis的三种映射关系以及联表查询
  • 基于串口校时的数字钟设计
  • 支持向量机(二)
  • Arrays.asList 和 null 类型
  • 《论文阅读》用提示和释义模拟对话情绪识别的思维过程 IJCAI 2023
  • 【AI】机器学习——绪论
  • linux 查看端口占用
  • modernC++手撸任意层神经网络22前向传播反向传播梯度下降等23代码补全的例子0901b
  • tkinter控件样式
  • 【linux命令讲解大全】042. 深入了解 which 命令:查找和显示命令的绝对路径
  • 实战项目 在线学院之集成springsecurity的配置以及执行流程
  • 【ARM CoreLink CCI-400 控制器简介】
  • Linux xargs命令继续学习
  • 【广州华锐互动】数字孪生智慧楼宇3D可视化系统:掌握实时运行状态,优化运营管理
  • 20230904工作心得:集合应该如何优雅判空?
  • 使用Python进行健身手表数据分析
  • 什么是malloxx勒索病毒,服务器中malloxx勒索病毒了怎么办?
  • CocosCreator3.8研究笔记(六)CocosCreator 脚本装饰器的理解
  • docker login harbor http login登录
  • day5 qt
  • 【80天学习完《深入理解计算机系统》】第十三天 3.7 缓冲区溢出 attack lab
  • Hadoop生态之hive
  • AWS DynamoDB浅析
  • Linux安装ffmpeg
  • (18)不重启服务动态停止、启动RabbitMQ消费者
  • 数据仓库的流程
  • MyBatis-Plus深入 —— 条件构造器与插件管理
  • C语言结构体的初始化方式
  • Vue生成多文件pdf准考证