2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

NGINX 应用性能优化指南(第六部分):连接优化

  • 2016-05-08
  • 本文字数:1860 字

    阅读完需:约 6 分钟

【编者的话】本文是“NGINX 应用性能优化指南”系列文章的第六篇,主要介绍了如何从连接优化方面实现 NGINX 应用性能优化。

注:本文最初发布于 MaxCDN 博客,InfoQ 中文站在获得作者授权的基础上对文章进行了翻译。

正文

RFC 7413 定义了 TCP Fast Open(TFO)——一种对 TCP 协议的扩展,允许在 TCP 握手期间的 TCP-SYN 和 TCP-SYN/ACK 数据包中夹带数据,这样就减少了一个 RTT。

在原有 TCP 连接的基础上,客户端生成一个TFO cookie,并将其放进 TCP-SYN 数据包作为一个 TCP 选项。稍后,当客户端再次连接时,它会在 TCP-SYN 数据包中再次发送同样的 cookie,同数据一起——可能是一个 HTTP 请求或者一个 TLS ClientHello。如果服务器识别出这个 cookie,那么它立即就会转换为已连接状态,并接收在 TCP-SYN 数据包中找到的数据。

虽然服务器可以使用 TCP-SYN/ACK 数据包中的数据回复,但更可能(从时间角度),TCP 栈会在 a 应用程序数据跟随到来之前发出 TCP-SYN/ACK 数据包。不管哪一种情况,数据较少的 TCP 握手往返现在可以用于发送和接收数据了,节省了一次往返。

这有益于加速 HTTP 请求,改善流媒体的首字节时间(TTFB)。实现 TFO 的核心以及 NGINX 所需要的所有东西就是listen指令的fastopen参数。

自 3.7 版本开始,在 IPv4 上支持 TFO 已经合并进 Linux 内核主干上(可以使用uname -r查看内核版本)。如果你运行着 3.13 或更好版本的内核,TFO 很可能已经默认启用。可以使用下面的命令(Linux)检查 TFO 是否启用:

复制代码
$ cat /proc/sys/net/ipv4/tcp_fastopen

0 值表明它被禁用了;位 0 对应客户端操作,而位 1 对应服务器操作。把tcp_fastopen设为 3 可将两者同时启用。

大多数可下载 NGINX 程序包都不包含TFO 支持,因为 TCP_FASTOPEN 并不一定在tcp.h中定义——即使内核提供了支持。你可以通过源代码构建 NGINX,并将编译时将限定-DTCP_FASTOPEN=23添加到 NGINX 的配置脚本中(--with-cc-opt)。

相关教程:在 CentOS 7 上启用 TFO for NGINX

证书验证

在 TLS 协商期间,客户端必须验证服务器的证书,以确信那个服务器就是它实际上请求的服务器。

验证通常包括生成一个 OCSP 请求,并发送给证书认证中心(CA),这意味着生成一个 DNS 查询和一个新的 TCP 连接。所有这些步骤都延长了同服务器进行 TLS 协商的时间。

OCSP Stapling 概念将 OCSP 查询的负担从客户端移到了服务器。结果是,服务器将 CA 的时限应答“钉合(stapling)”到服务器的证书上,这样一来就简化了客户端的证书验证步骤。

NGINX 通过ssl_stapling及相关指令来支持 OCSP Stapling。

TLS 会话恢复

有两种机制可以用于让后续 TLS 连接(下面会讨论)少一次往返:

  1. TLS 会话 ID
  2. TLS 会话票证

需要注意的是,TLS 会话恢复在服务器端会泄露 TLS 会话信息,破坏“完全前向保密(perfect forward secrecy)”。因此,如果需要 PFS,就不应该用它。另一方面,通过在一个 TLS 隧道中复用多个请求,HTTP/2 提供了同TLS 会话恢复一样的 RTT 优化,而且不用牺牲 PFS。

TLS 会话 ID

在最初的 TLS 握手期间,服务器会生成一个 TLS 会话 ID,并通过 ServerHello 消息发送给客户端——这在 Wireshark 跟踪文件中可以看到:

对于后续的 TLS 握手,客户端可能会在其 ClientHello 消息中发送会话 ID。这就使得服务器可以恢复缓存的 TLS 上下文,在一次 TLS 握手中省掉两次往返。

NGINX 通过ssl_session_cachessl_session_timeout指令支持 TLS 会话 ID。

TLS 会话票证

TLS 会话票证TLS 会话 ID的概念类似,不过存储会话信息的负担由服务器端转移到了客户端。

在一次普通的 TLS 握手期间,服务器会加密其 TLS 会话信息,并将结果票证发送给客户端。虽然客户端无法解码票证,但它可以在下次想要建立 TLS 连接时将其发回服务器。

TLS 会话 ID一样,这会减少一次往返——但服务器不必维护 SSL 缓存。不过,服务器必须维护一个用于加密票证的密钥(ssl_session_ticket_key),并要确保它的安全。

找到属于自己的理想 NGINX 设置

按照设计,NGINX 是完全开放的。它是一辆装有光面轮胎的赛车,而且驾驶它的是一个疯狂的司机。所以大家一起尽情地玩,尝试一些东西,让我们知道你能让它多快。此外,如果你认为有什么东西应该加入到这份指南中,请告诉我们。我们会在第二个版本中补充和修正。

查看英文原文: NGINX Application Performance Optimization:Connection Optimizations


感谢郭蕾对本文的策划和审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-05-08 18:065408
用户头像

发布了 1008 篇内容, 共 442.0 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

Kyutai 开源 STT 模型,支持流式传输;AI 虚拟角色桌面设备 Dipal D1:会动、会说话、会回应你丨日报

声网

编程助手怎么选?我都要!左手通义灵码,右手 Cursor,组合来用超级爽

阿里云云效

阿里云 通义灵码

弥合 AI 学习与实践鸿沟:咕泡科技九年演进中的专家团服务体系升级

咕泡科技

人工智能

11Labs 增长负责人分享:企业级市场将从消费级或开发者切入丨Voice Agent 学习笔记

声网

鸿蒙开发笔记:Asset Store Kit 实现教育资源共享平台

bianchengyishu

HarmonyOS NEXT

电子制造智能化转型:MES如何解决工艺复杂、质量追溯与供应链协同

万界星空科技

mes 万界星空科技mes 电子电器制造业 电子电器行业 电子行业mes

n8n教程:5分钟部署+自动生AI日报并写入飞书多维表格

阿星AI工作室

人工智能 前端 后端

我在618主场,和3位顶尖技术博士聊了聊

京东零售技术

HarmonyOS Development Practice: Basic Services Kit 构建教育基础服务平台

bianchengyishu

HarmonyOS NEXT

HarmonyOS Development Practice: Car Kit 构建智慧校车管理系统

bianchengyishu

HarmonyOS NEXT

鸿蒙开发实战:Connectivity Kit 构建校园智能物联网络

bianchengyishu

HarmonyOS NEXT

DApp 开发大揭秘:智能合约的神奇魔力

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 公链开发代币开发

编程助手怎么选?我都要!左手通义灵码,右手 Cursor,组合来用超级爽

阿里巴巴云原生

阿里云 通义灵码

AI重塑生产逻辑,华为云数智领航会释放AI与产业融合新价值

极客天地

鸿蒙开发实战:Crypto Architecture Kit 构建教育数据安全体系

bianchengyishu

HarmonyOS NEXT

Java 集合框架底层数据结构实现深度解析

电子尖叫食人鱼

Java 数据结构

产品更新丨谷云科技 iPaaS 集成平台 V7.5 版本更新

谷云科技RestCloud

API 网关 集成平台 ipaas MCP

ManageEngine卓豪简化变更管理的工作方法(一)

ServiceDesk_Plus

变更管理 ManageEngine卓豪

打破 996 魔咒,重塑软件开发

飞算JavaAI开发助手

西南会议 | 2025 Altair 区域技术交流会下周五成都,日程+演讲阵容+惊喜好礼全面公布!

Altair RapidMiner

人工智能 AI 仿真 CAE AI驱动工程

基于运营商数据的用户关系模型建立示例

天翼云开发者社区

大数据 关系模型

Layer2 互操作时代:构建无缝体验的链间未来

NFT Research

blockchain web3 layer2

Trino 可观测性最佳实践

观测云

trino

商场商圈潜客挖掘模型

天翼云开发者社区

数据挖掘 大数据

信创 CDC 实战|国产数据库的数据高速通道:OceanBase 实时入仓 StarRocks

tapdata

Tapdata 实时数据同步 oceanbase数据同步 starrocks数据同步 数据入仓

老项目改造、定制开发太难搞?那是你没用对方法

飞算JavaAI开发助手

Spring Boot 启动优化实践

不在线第一只蜗牛

Spring Boot

全球AI盛会丨亮点揭秘!3大会场,20+热点议题:AI 技术如何工程设计、仿真与制造赋能

Altair RapidMiner

AI 制造业 数字孪生 仿真 CAE

BeeWorks免费版正式上线!

BeeWorks

即时通讯

博大数据精彩亮相2025中国国际金融展,全栈解决方案赋能金融数字化升级

极客天地

什么是内网穿透?如何实现无公网IP远程访问?

贝锐

内网穿透

NGINX应用性能优化指南(第六部分):连接优化_后端_谢丽_InfoQ精选文章