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

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

【编者的话】本文是“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代理指令清单

相关厂商内容

生于移动, 无所不能。

通过demo学习OpenStack开发所需的基础知识 — 软件包管理

Get最新活动 享受技术人生

GMTC全球移动技术大会,6折优惠,最后一周!

百度沙龙63期:智能语音和大数据护航车联网解决方案

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

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

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

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

感谢郭蕾对本文的审校。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,972评论 19 139
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 6,328评论 0 9
  • 上一篇《WEB请求处理一:浏览器请求发起处理》,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建...
    七寸知架构阅读 81,524评论 21 356
  • 基于IP地址的访问控制模块 ngx_http_access_module模块可以限制某些客户端IP地址的访问,针对...
    geekdeedy阅读 3,671评论 0 0
  • “文哥,这都快一个月了,我的资产什么时候给我?这几天家里出了点事,急用钱。文哥你能给我个具体的时间么?” “凌霜啊...
    暮岚雪阅读 2,981评论 2 3

友情链接更多精彩内容