nginx的keepalive和连接超时问题

什么时间开启keepalive

腾讯云文档

client ---- server

 keepalive_disable  是否开启
 keepalive_requests   keepalive 的连接数了默认是100 过大的数值会造成内存使用量激增不推荐
 keepalive_time    最大的keepalive 保持时间(请求一直存在超过这个时间 也会被强制关闭)
 keepalive_timeout    keepalived 最大允许间隔时间
 send_timeout  给服务端回包,超过这个时间没返回强制关闭连接

server ---- upstream

配置在upstream 中的 keepalive

将 proxy_set_header Connection ""; 添加到 Nginx 配置文件中的 http 上下文中,可以确保在使用 keepalive 连接时,Nginx 代理服务器不会将 Connection 标头转发到后端服务器。 

这是因为在 HTTP/1.1 中,Connection 标头用于指示客户端或服务器是否希望保持持久连接(即 keepalive 连接)。如果客户端将 Connection 标头设置为 keep-alive,则服务器应继续使用相同的连接来发送响应。 

但是,如果将 Connection 标头转发到后端服务器,并且该标头设置为 keep-alive,则后端服务器可能会认为客户端希望保持持久连接,从而导致服务器保持连接打开状态,即使客户端已经关闭连接。这可能会导致后端服务器资源耗尽,从而导致应用程序故障。 

通过将 proxy_set_header Connection ""; 添加到配置中,Nginx 代理服务器将不会转发 Connection 标头,从而防止此类问题发生。这是因为将 Connection 标头设置为空字符串会告诉 Nginx 代理服务器在转发请求时删除此标头。 

需要注意的是,如果您的后端服务器使用了 HTTP/1.0 协议,则无需将 proxy_set_header Connection ""; 添加到配置中,因为 HTTP/1.0 不支持 keepalive 连接。

客户端请求504

部署diffusion-webui 时 当生成图片请求时间过长(3m)。有个接口总是504 造成服务无法访问

        location /run/predict/ {
                proxy_set_header Host $host;
                proxy_pass http://diffusionx;
                 proxy_connect_timeout 15000;
                 proxy_read_timeout 15000;
                 proxy_send_timeout 15000;
        }
posted @ 2022-06-20 19:46  萱乐庆foreverlove  阅读(382)  评论(0)    收藏  举报