Nginx中keepalive配置小结

 更新时间:2023年09月20日 09:15:44   作者:一个风轻云淡  
本文介绍了Nginx keepalive配置的概念和作用,阐述了keepalive连接的基本原理和优势,并给出了一些常用的配置示例,具有一定的参考价值,感兴趣的可以了解一下

keepalive基础介绍

keepalive是HTTP/1.1协议中的一个特性,它允许客户端和服务器之间的TCP连接在一个HTTP请求/响应周期结束后保持打开状态,以便在后续的请求中重复使用。这样可以减少TCP连接的建立和关闭次数,从而提高性能。

(注意:keepalive是tcp层长连接探活机制;keep-alive是应用层http协议使用,在其头部Connection字段中的一个值,只是代表客户端与服务之间需要保持长连接,可以理解为通过此字段来告诉nginx此连接需要维持长连接,处理完别直接关闭连接。) 

  • 连接维护:keepalive会维护长连接,并在连接超时时间内重新连接,以确保服务器端始终处于运行状态。
  • 提高效率:通过维护长连接,可以减少建立和关闭连接所需的时间,从而提高服务器的效率。
  • 节省带宽:由于keepalive可以维护长连接,因此减少了建立和关闭连接所需的网络流量,从而节省了带宽。
  • 稳定性:通过心跳包维护连接,可以确保服务器端始终处于运行状态,从而提高了网站的稳定性和可用性。

为什么使用HTTPs长连接技术?

  • 对响应时间要求较高;
  • 服务走的是公网,客户端与服务端的TCP建立的三次握手和断开的四次挥手都需要40ms左右(真实数据包计算出来的),共需要80ms左右;
  • 每个接入方使用的IP就若干个,需要建立的请求连接有限。
  • 使用长连接技术,可以大幅减少TCP频繁握手的次数,极大提高响应时间;同时,即使使用长连接技术,也不需要消耗很多的系统资源用来缓存sockets会话信息。 
http {
upstream backend {
  server 192.168.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
  server 192.168.0.2:8080 weight=1 max_fails=2 fail_timeout=30s;
  keepalive 300;      
}  
server {
  listen 8080 default_server;
  server_name "";
location / {
  proxy_pass http://backend;
  proxy_http_version 1.1;                   #设置http版本为1.1
  proxy_set_header Connection "";           #设置Connection为长连接(默认为no)
  }
}

 HTTP 协议中对长连接的支持是从 1.1 版本之后才有的,因此最好通过 proxy_http_version 指令设置为 1.1。HTTP1.0不支持keepalive特性,当没有使用HTTP1.1的时候,后端服务会返回101错误,然后断开连接。而 "Connection" header 可以选择被清理,这样即便是 Client 和 Nginx 之间是短连接,Nginx 和 upstream 之间也是可以开启长连接的。这种情况下必须清理来自 Client 请求中的 “Connection” header。

要想做到Client与Nginx之间保持长连接,需要:

  • -  Client发送过来的HTTP请求要求携带"keep-alive"header。
  • -  Nginx设置支持keepalive 

Nginx中的keepalive配置项

keepalive_timeout  

Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间(timeout),指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接。

# 可用于 http, server, location 配置块
# 设置 TCP 链接保持 60 秒
keepalive_timeout 60s;

send_timeout 

服务端向客户端传输数据的超时时间。这个设置不会用于整个转发器,而是在两次客户端读取操作之间。如果在这段时间内,客户端没有读取任何数据,Nginx就会关闭连接。

# 配置段: http, server, location
send_timeout 30s;

keepalive_request

keepalive_requests:默认100,某个长连接连续处理请求次数限制,超过次数则该长连接被关闭;如果需要释放某个连接占用的内存,必须关闭该链接,内存不大的情况下,不建议开大该配置;在QPS较高的场景,则有必要加大这个参数

# 配置段: http, server, location  
keepalive_request 10000;

应用场景

什么时候使用?

明显的预知用户会在当前连接上有下一步操作 复用连接,有效减少握手次数,尤其是https建立一次连接开销会更大

什么时候不用?

访问内联资源一般用缓存,不需要keepalive 长时间的tcp连接容易导致系统资源无效占用

到此这篇关于Nginx中keepalive配置小结的文章就介绍到这了,更多相关Nginx keepalive配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx出现403 Forbidden的几种简单解决方式

    Nginx出现403 Forbidden的几种简单解决方式

    这篇文章主要介绍了Nginx出现403 Forbidden的几种解决思路,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Nginx的405 not allowed错误解决方法

    Nginx的405 not allowed错误解决方法

    本文主要介绍了Nginx的405 not allowed错误解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • nginx下部署vue项目的方法步骤

    nginx下部署vue项目的方法步骤

    这篇文章主要介绍了nginx下部署vue项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Nginx实现http自动跳转到https

    Nginx实现http自动跳转到https

    本文主要介绍了Nginx实现http自动跳转到https,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 在Nginx浏览器中打开目录浏览功能

    在Nginx浏览器中打开目录浏览功能

    这篇文章主要介绍了在Nginx浏览器中打开目录浏览功能,Nginx的目录浏览功能默认情况下被关闭需要手动打开,需要的朋友可以参考下
    2015-07-07
  • 在nginx中配置pathinfo模式支持thinkphp的URL重写

    在nginx中配置pathinfo模式支持thinkphp的URL重写

    这篇文章主要介绍了在nginx中配置pathinfo模式的例子,用来支持thinkphp的URL重写,并解决了thinkphp一个路径问题,需要的朋友可以参考下
    2014-04-04
  • Nginx部署多个vue项目的方法步骤

    Nginx部署多个vue项目的方法步骤

    本文主要介绍了Nginx部署多个vue项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 让Nginx支持shtml格式的配置方法

    让Nginx支持shtml格式的配置方法

    这篇文章主要介绍了让Nginx支持shtml格式的配置方法,shtml格式可以包含一些服务端指令,同PHP中的include功能类似,需要的朋友可以参考下
    2014-08-08
  • 利用Nginx反向代理解决跨域问题详解

    利用Nginx反向代理解决跨域问题详解

    这篇文章主要介绍了利用Nginx反向代理解决跨域问题详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • nginx fair负载均衡方式使用详解

    nginx fair负载均衡方式使用详解

    本文主要介绍了nginx fair负载均衡方式使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08

最新评论