当前位置: 首页 > 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;}
}

相关文章:

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

文章目录 1. sendfile 指令2. tcp_nopush 指令3. tcp_nodelay 指令 1. sendfile 指令 请求静态资源的过程:客户端通过网络接口向服务端发送请求,操作系统将这些客户端的请求传递给服务器端应用程序,服务器端应用程序会处理这些请求&#xff…...

【动手学深度学习】--语言模型

文章目录 语言模型1.学习语言模型2.马尔可夫模型与N元语法3.自然语言统计4.读取长序列数据4.1随机采样4.2顺序分区 语言模型 学习视频:语言模型【动手学深度学习v2】 官方笔记:语言模型和数据集 在【文本预处理】中了解了如何将文本数据映射为词元&…...

uni-app 之 目录结构

目录结构: 工程简介 | uni-app官网 (dcloud.net.cn) pages/index/index.vue 页面元素等 static 静态文件,图片 字体文件等 App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期 index.html 项目运行最终生成的文件 main.js 引用的…...

批量上传图片添加水印

思路&#xff1a; 1、循环图片列表&#xff0c;批量添加水印。 2、与之对应的html页面也要魂环并添加水印。 代码实现&#xff1a; <view style"width: 0;height: 0;overflow: hidden;position:fixed;left: 200%;"><canvas v-for"(item,index) in …...

CPU和GPU性能优化

在Unity游戏开发中&#xff0c;优化CPU和GPU的性能是非常重要的&#xff0c;可以提高游戏的运行效率、降低功耗和延迟&#xff0c;并提高用户体验。以下是一些优化CPU和GPU性能的方法&#xff1a; 1.优化游戏逻辑和算法 减少不必要的计算和内存操作&#xff0c;例如避免频繁的…...

虚拟机(三)VMware Workstation 桥接模式下无法上网

目录 一、背景二、解决方式方式一&#xff1a;关闭防火墙方式二&#xff1a;查看桥接模式下的物理网卡是否对应正确方式三&#xff1a;查看物理主机的网络属性 一、背景 今天在使用 VMware Workstation 里面安装的 Windows 虚拟机的时候&#xff0c;发现虽然在 NAT 模式下可以…...

[BFS] 广度优先搜索

1. 数字操作 常见的模板 // 使用一个数组判断元素是否入过队 int inqueue[N] {0}; // 层数或者可以称为深度 int step 0; // 判断是否可以入队的条件 int isvalid(){ } BFS(int x){ // 将初始的元素压入队列 // 注意每次压队的时候都要将inque[x] 1,表明入队过…...

蓝桥杯官网填空题(矩形切割)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明有一些矩形的材料&#xff0c;他要从这些矩形材料中切割出一些正方形。 当他面对一块矩形材料时&#xff0c;他总是从中间切割一刀&#xff0c;切出一块最大的…...

通过Docker Compose安装MQTT

一、文件和目录说明 1、MQTT安装时的文件和目录 EMQX 安装完成后会创建一些目录用来存放运行文件和配置文件&#xff0c;存储数据以及记录日志。 不同安装方式得到的文件和目录位置有所不同&#xff0c;具体如下&#xff1a; 注意&#xff1a; 压缩包解压安装时&#xff0c;目…...

Golang企业面试题

Golang企业面试题 基础 高级 Golang有哪些优势&#xff1f;Golang数据类型有哪些Golang中的包如何使用Go 支持什么形式的类型转换&#xff1f;什么是 Goroutine&#xff1f;你如何停止它&#xff1f;如何在运行时检查变量类型&#xff1f;Go 两个接口之间可以存在什么关系&a…...

Jenkins测试报告样式优化

方式一&#xff1a;修改Content Security Policy&#xff08;临时解决&#xff0c;Jenkins重启后失效) 1、jenkins首页—>ManageJenkins—>Tools and Actions标题下—>Script Console 2、粘贴脚本输入框中&#xff1a;System.setProperty("hudson.model.Directo…...

函数相关概念

4.函数 1.函数的概念 1.什么是函数? 把特点的代码片段,抽取成为独立运行的实体 2.使用函数的好处1.重复使用,提供效率2.提高代码的可读性3.有利用程序的维护 3.函数的分类1.内置函数(系统函数)已经提高的alert(); prompt();confirm();print()document.write(),console.log()…...

2023软考学习营

...

Vue2进阶篇学习笔记

文章目录 Vue2进阶学习笔记前言1、Vue脚手架学习1.1 Vue脚手架概述1.2 Vue脚手架安装1.3 常用属性1.4 插件 2、组件基本概述3、非单文件组件3.1 非单文件组件的基本使用3.2 组件的嵌套 4、单文件组件4.1 快速体验4.2 Todo案例 5、浏览器本地存储6、组件的自定义事件6.1 使用自定…...

Python 正则表达式:强大的文本处理工具

概念&#xff1a; 正则表达式是一种强大的文本匹配和处理工具&#xff0c;它可以用来在字符串中查找、替换和提取符合某种规则的内容。在Python中&#xff0c;使用re模块可以轻松地操作正则表达式&#xff0c;它提供了丰富的功能和灵活的语法。 场景&#xff1a; 正则表达式…...

Linux如何查看系统时间

文章目录 一、使用date命令查看系统时间二、通过/var/log/syslog文件查看系统时间三、通过/proc/uptime文件查看系统运行时间四、通过hwclock命令查看硬件时间五、通过timedatectl命令设置系统时区六、通过NTP协议同步网络时间七、通过ntpstat命令检查NTP同步状态八、使用cal命…...

46. 出勤率问题

文章目录 题目需求实现一题目来源 题目需求 现有用户出勤表&#xff08;user_login&#xff09;如下。 user_id (用户id)course_id (课程id)login_in &#xff08;登录时间&#xff09;login_out &#xff08;登出时间&#xff09;112022-06-02 09:08:242022-06-02 10:09:361…...

Xilinx IDDR与ODDR原语的使用

文章目录 ODDR原语1. OPPOSITE_EDGE 模式2. SAME_EDGE 模式 ODDR原语 例化模板&#xff1a; ODDR #(.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE" .INIT(1b0), // Initial value of Q: 1b0 or 1b1.SRTYPE("SYNC…...

面试系列 - 序列化和反序列化详解

Java 序列化是一种将对象转换为字节流的过程&#xff0c;可以将对象的状态保存到磁盘文件或通过网络传输。反序列化则是将字节流重新转换为对象的过程。Java 提供了一个强大的序列化框架&#xff0c;允许你在对象的持久化和网络通信中使用它。 一、Java 序列化的基本原理 Jav…...

基于Elasticsearch + Fluentd + Kibana(EFK)搭建日志收集管理系统

目录 1、EFK简介 2、EFK框架 2.1、Fluentd系统架构 2.2、Elasticsearch系统架构 2.3、Kibana系统架构 3、Elasticsearch接口 4、EFK在虚拟机中安装步骤 4.1、安装elasticsearch 4.2、安装kibana 4.3、安装fluentd 4.4、进入kibana创建索引 5、Fluentd配置介绍 VC常…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...