nginx配置https域名后,代理后端服务器流式接口变慢

目录

问题描述

使用nginx配置域名和https的ssl证书后,代理后端web服务器,发现流式接口比原来直接用服务器外部ip+后端web服务器端口变慢了很多。

原因

在于 HTTP 和 HTTPS 在 Nginx 代理中的处理方式不同。以下几点解释了为什么 HTTP 请求可以正常响应,而 HTTPS 请求在没有关闭 proxy_buffering 时表现出卡顿的现象。

  1. Nginx 代理行为差异:

HTTP:在 HTTP 请求中,Nginx 默认会使用缓冲机制,但由于 HTTP 请求本身并不涉及加密和解密,数据的传输和处理通常比较快,即使启用了 proxy_buffering,只要后端响应速度快,客户端也不会明显感受到延迟。Nginx 能够较快速地将缓冲的数据传递给客户端,因此你感受不到 HTTP 请求的卡顿。

HTTPS:HTTPS 请求涉及加密、解密过程,Nginx 需要处理 SSL/TLS 协议,导致响应的数据经过更多处理环节。在这种情况下,proxy_buffering 缓冲机制可能会导致 Nginx 等待完整的响应数据块,再将其推送到客户端,增加了数据传输的延迟感,尤其在流式数据的场景中更明显。

  1. 缓冲的作用:

proxy_buffering 的默认行为:Nginx 默认会缓冲来自后端服务器的响应数据,缓冲满了之后再一次性发送到客户端。对于 HTTP 请求,数据包小而且无需解密,Nginx 处理较为快速,通常不会影响用户体验。

HTTPS 的复杂性:在 HTTPS 情况下,由于涉及加密和较大的数据包,Nginx 可能需要更长的时间来处理响应。而当启用缓冲时,Nginx 会先缓冲较大的数据块,再推送到客户端,这使得 HTTPS 的流式响应延迟更为明显。关闭 proxy_buffering 后,Nginx 可以直接将流式数据传递给客户端,无需等待缓冲区填满。

  1. 流式传输的需求:

流式响应要求数据能够即时从后端传递给前端,而不是经过代理服务器的缓冲。对于流式传输来说,proxy_buffering 可能会阻碍这种即时时性。HTTP 由于传输开销小,能承受一定的缓冲延迟,而 HTTPS 的加密过程放大了这个问题。

  1. 数据包大小和网络开销:

HTTPS 请求的每个数据包相对更大,因为它包含了加密后的数据。Nginx 可能需要缓冲这些较大的数据包,而一旦 Nginx 使用 proxy_buffering 进行缓冲处理,这种额外的等待时间会被放大。而 HTTP 请求没有这种加密开销,响应更快。

总结:

简单来说,HTTPS 请求的流式响应之所以卡顿,主要是因为:

数据包更大:HTTPS 请求的数据包经过加密后确实比 HTTP 大一些,加密增加了开销。

缓冲机制的影响:在 HTTPS 请求中,Nginx 的缓冲机制需要更多时间来处理这些加密的数据包,导致延迟。相比之下,HTTP 没有加密开销,即使启用缓冲,数据传输也相对流畅。

因此,同样的请求,HTTPS 因为加密、数据包较大,加上 Nginx 的缓冲,导致流式响应出现卡顿。关闭 proxy_buffering 后,Nginx 不再等待缓冲区填满,而是直接传输数据,HTTPS 响应也就变得流畅了。

解决办法

综上的原因,直接关闭nginx代理https的缓冲就好了

bash 复制代码
location /streaming_path {
    proxy_pass http://backend_service;
    proxy_buffering off;  # 关闭代理缓冲,确保流式传输
}

为了更好的避免因https的原因造成流式接口响应速度变慢,最终决定直接用外网ip+后端服务器端口号的形式,绕过nginx反向代理,直接访问后端接口。

参考文章:https://juejin.cn/post/7417521775586770995

相关推荐
清清ww1 小时前
【网络】HTTP 和 HTTPS
网络·http·https
m0_745364244 小时前
Nginx反向代理及负载均衡
运维·nginx·负载均衡
yunqi121512 小时前
【负载均衡系列】nginx负载高怎么排查
运维·nginx·负载均衡
若云止水15 小时前
ngx_http_add_location
nginx
若云止水15 小时前
ngx_http_escape_location_name
nginx
慢德18 小时前
HTTP长连接与短连接的前世今生
网络·https
醉殇姒若梦遗年18 小时前
给网站配置https访问
网络协议·https·解决方案·ssl证书
餘yuqn18 小时前
项目部署后,nginx拦截请求后无法通过后端服务security放行规则
spring boot·nginx
网络安全天地21 小时前
Wireshark网络抓包分析使用详解
websocket·网络协议·tcp/ip·http·网络安全·https·udp
fall_rain1 天前
基于socket实现一个简易的web服务器——非阻塞的模式
nginx