写点什么

NGINX 应用性能优化指南(第二部分):反向代理缓冲

  • 2016-04-20
  • 本文字数:1287 字

    阅读完需:约 4 分钟

【编者的话】本文是“NGINX 应用性能优化指南”系列文章的第二篇,主要介绍了如何通过反向代理缓冲实现 NGINX 应用性能优化。

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

正文

当 NGINX 从后台接收响应时,代理缓冲非常有用。这既可以发生在第一次获取可缓冲的资源时,也可以发生在请求动态 / 不可缓冲内容时。

按照设计,NGINX 会为大小合理的响应正文设置缓冲区。但是,如果来自后台应用服务器的响应无法放入这些缓冲区,响应就会被写进一个临时文件。

对于可缓存内容,这不算什么问题,因为你可以恰当地配置缓存,让它基于反向代理的文件系统。然而为了正确设置代理缓冲区的大小,你会想分析应用的不可缓存响应,而对于块编码的响应,你会想分析块与块之间的差别。

指令proxy_buffering决定 NGINX 是异步(默认启用)还是同步(禁用)转发响应。

proxy_buffering禁用时,从服务器收到的数据会被 NGINX 立即转发,这样可以获得最小的首字节时间(TTFB)。

从响应中读取的数据量受 proxy_buffer_size控制——代理缓冲禁用时唯一相关的代理缓冲指令。因此,如果你的目标是 TTFB,那么请确保tcp_nodelay被启用(默认),而tcp_nopush被禁用(默认)。

警告:禁用代理缓冲实际上风险相当大,因此,除非你知道自己究竟在做什么,否则我不建议你那么做。通常,反向代理和后台应用服务器位于同一个速度非常快的局域网上。但是客户端连接质量差异巨大,有时还会失速。

如果代理的客户端连接对代理的上游连接(大资源或 HTTP/2)造成反压,它就劫持了应用服务器,迫使它以客户端的低速度传送完响应末尾部分。有些人喜欢部署许多性能较差的后台服务器,而这些服务器无法支撑几百个以上的并发连接,对他们而言,这个问题尤为严重。

另一方面,proxy_buffering启用时,要提防使用的代理缓冲区太大。这可能会吃掉你的内存,限制代理能够支持的最大并发连接数。

虽然可能大多数人会配置全局代理缓冲和缓冲区大小,但值得注意的是,这套指令可以针对每个服务器块甚至是每个位置块进行配置,为自定义内容分发提供无限的灵活性。

相关教程: NGINX 代理指令清单

对于 HTML 或 JavaScript,HTTP Archive 的统计表明,单个响应的平均大小小于32KB ,因此,你可能不需要调整 proxy_buffers的默认值。

在进行无知的猜测前,先看下应用程序响应正文的大小,并设法限制代理缓冲区随动态响应增长,因为那些响应不会被缓存。而且,可缓存响应无论如何都需要存入磁盘,因此设法将它们全部缓冲可能没什么用。

NGINX 还能够让应用程序服务器使用 HTTP 响应头字段X-Accel-Buffering(设置为yesno)根据每个响应决定代理缓冲区行为。不过,它不允许应用服务器影响那个响应的缓冲区大小,因此会使用 _ 内在的 _ 配置值。或者,就像忽略其他任何带有proxy_ignore_headers指令的 HTTP 头一样忽略它。

查看引文原文: NGINX Application Performance Optimization:Reverse Proxy Buffering


感谢郭蕾对本文的审校。

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

2016-04-20 17:345088
用户头像

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

关注

评论

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

使用 Stable Diffusion Img2Img 生成、放大、模糊和增强

3D建模设计

Stable Diffusion 稳定扩散 图像修复 AI 图像生成

JDK11升级JDK17最全实践干货来了 | 京东云技术团队

京东科技开发者

Java jdk

App Cleaner & Uninstaller激活中文最新版下载

iMac小白

KeyShot 2023.3 Pro for mac(3D渲染和动画制作软件) v12.2.0永久激活版

mac

苹果mac Windows软件 KeyShot Pro 动画软件

什么是稳定扩散,它是如何工作的?

3D建模设计

机器学习 Stable Diffustion 稳定扩散

UBC SDK日志级别重复率优化实践

百度Geek说

大数据 日志 sdk 企业号11月PK榜

软件测试/测试开发丨探索标识符在编程中的重要性

测试人

软件测试

【万字长文】前端性能优化实践 | 京东云技术团队

京东科技开发者

性能优化 前端

如何通过一个 SQL 语句构建实时数仓?

NineData

数据分析 sql 数据库系统 数据查询 异构

稳定扩散 img2img 的工作原理

3D建模设计

Stable Diffusion 稳定扩散 img2img text2img

什么是稳定扩散中的采样步骤?

3D建模设计

Stable Diffusion 稳定扩散 图像修复 img2img text2img

火山引擎DataTester上线「集成工作台」功能,助力企业打造专属AB平台

字节跳动数据平台

大数据 对比实验 大数据 A/B测试

Apifox 新功能发布:自动化测试迎来重大突破!

Apifox

程序员 测试 自动化测试 Apifox 测试工具

文件夹图标修改器:Folder Factory for mac激活版

iMac小白

Folder Factory下载 Folder Factory破解版 Folder Factory mac

探索数据湖和大数据在亚马逊云服务云存储服务上的威力

亚马逊云科技 (Amazon Web Services)

大数据 S3 EMR Amazon Glue 云存储服务

稳定扩散与潜伏扩散:哪个更好?

3D建模设计

人工智能 机器学习 Stable Diffusion Latent Diffusion

MYSQL 事务的底层原理 | 京东物流技术团队

京东科技开发者

MySQL 数据库 事务 底层原理 企业号11月PK榜

从BST到LSM的进阶之路 | 京东物流技术团队

京东科技开发者

数据结构 Lsm 数据结构与算法 BST 企业号11月PK榜

Stable Diffusion 是否使用 GPU?

3D建模设计

Stable Diffusion 稳定扩散 img2img text2img AI图像合成

OmniGraffle for mac(绘图软件) v7.22.2中文正式版

mac

苹果mac Windows软件 OmniGraffle 图表设计软件

最佳案例公布:EMQ 和 Intel 评选 IIoT 领域创新应用

新消费日报

支持M1/M2 Lightroom Classic 2024 for Mac(LRC2024)中文完美激活版下载

iMac小白

animate2024破解版下载(animate v24.0新版)

iMac小白

IntelliJ IDEA 2023最新激活码(附IntelliJ IDEA 2023破解版下载)

iMac小白

企业软件app定制开发流程

Geek_16d138

app定制开发 软件开发定制

NGINX应用性能优化指南(第二部分):反向代理缓冲_后端_谢丽_InfoQ精选文章