写点什么

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:345261
用户头像

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

关注

评论

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

最近很火的iOS模拟器Delta iPhone模拟器使用教程:安装、存档等

Rose

mac游戏模拟器 经典的GBA游戏iOS版资源 delta

小游戏看广告项目系统开发详细步骤/需求设计/功能逻辑/源码指南

系统开发咨询1357O98O718

Autodesk Maya 2025全新升级 适配Apple Silicon

Rose

Maya 2025中文版 玛雅2025新功能 玛雅2025破解 Maya 2025安装教程

Microsoft Outlook 2021电子邮件和日历,最佳效率神器!

Rose

Outlook2021 Microsoft Outlook Outlook许可证 mac邮箱软件

使用Python捕获和处理异常日志

霍格沃兹测试开发学社

Dapp/DeFi算力质押项目挖矿分红系统开发稳定版及详细

系统开发咨询1357O98O718

区块链Web3.0合约代币交易所质押模式挖矿分红系统统开发指南教程及源码

系统开发咨询1357O98O718

Mac 版 Excel 和 Windows 版 Excel的区别

Rose

Excel Excel 许可证

Mac怎么锁屏,快速锁定Mac电脑屏幕的方法

Rose

苹果电脑使用教程 Mac电脑锁屏 macos锁屏

论文解读-面向高效生成大语言模型服务:从算法到系统综述

合合技术团队

人工智能 算法 OCR LLM

Web3.0数字货币去中心化交易所系统开发详细流程及方案

系统开发咨询1357O98O718

短剧系统开发流程步骤/功能设计/方案项目/源码程序

系统开发咨询1357O98O718

阿里巴巴中国站拍立淘API返回值详解:以图搜商品新体验

技术冰糖葫芦

api 货币化 API 接口 API 文档 API】 pinduoduo API

解决 Parallels Desktop (PD)虚拟机不能连网的问题

Rose

PD虚拟机不能联网 Parallels Desktop 19 PD虚拟机授权秘钥

浅谈Python在人工智能领域的应用

小齐写代码

小游戏看广告项目系统开发流程步骤/需求逻辑/源码功能

系统开发咨询1357O98O718

什么是链游?链游dapp游戏系统开发详细案例/步骤方案/规则玩法/源码流程

系统开发咨询1357O98O718

苹果 macOS 14.4正式发布 9大重要功能值得关注

Rose

MacOS14系统 macOS 14 Sonoma 苹果电脑系统下载

共同探讨人工智能产业未来发展方向“2024长三角人工智能展会”

AIOTE智博会

人工智能展览会 人工智能展会 人工智能展

AI大模型是如何改变我们的日常生活的?

天津汇柏科技有限公司

AI大模型

不谈虚的,平台即产品真的有那么好吗?

SEAL安全

运维 平台工程 PaaP

神技能!如何用Python快速生成SQL语句?

霍格沃兹测试开发学社

QSpace Pro 一款简洁高效的多窗格文件管理器,灵活且实用!

Rose

mac窗口管理工具 QSpace Pro QSpace Pro下载

Mac电脑上好用的设计绘图软件都有哪些,这6款一定不要错过!

Rose

mac设计软件 设计必备工具 苹果电脑设计软件合集 好用的平面设计软件

Topaz Photo AI for mac常见问题 导入图像时冻结

Rose

阿里云边缘容器云帮助AI推理应用快速落地

MasterInTech

阿里云 容器云 边缘云 AI推理

使用 Python 循环创建多个列表

霍格沃兹测试开发学社

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