nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx keepalive配置

Nginx中keepalive配置小结

作者:一个风轻云淡

本文介绍了Nginx keepalive配置的概念和作用,阐述了keepalive连接的基本原理和优势,并给出了一些常用的配置示例,具有一定的参考价值,感兴趣的可以了解一下

keepalive基础介绍

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

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

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

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之间保持长连接,需要:

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配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文