• Post author:
  • Post category:nginx
  • Post comments:0评论

一、基本概念

  首先我们要知道当我们去访问一个网站时,是先要和服务端建立TCP连接的,当数据传输完成后,这个TCP连接就会被关闭。当你再去请求时,又需要重新去建立连接,这无疑是多余的损耗。
  因此就有了keep-alive机制,即长连接,这样在一个TCP连接上就可以连续发送多个数据包而不会断开连接(即复用TCP连接),但是因为长连接对于服务端来说会耗费一定的资源,所以长连接和短连接的选择要视情况而定。
  长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况;而短连接相对适用于并发量大或者每个用户无需频繁操作的情况下。

二、无代理情况下

 在无代理的情况下,一般不需要做太多操作,通常默认就是长连接,我们只需要视情况定义长连接的超时时间即可。

# 定义长连接超时时间
Syntax: keepalive_timeout timeout [header_timeout];
Default:    keepalive_timeout 75s;
Context:    http, server, location

# 定义最多接收多少请求就关闭连接
Syntax: keepalive_requests number;
Default:    keepalive_requests 100;
Context:    http, server, location

注:以上两个配置参数位于 ngx_http_core_module 模块。HTTP1.1规定了默认保持长连接。

三、有代理情况下

  Nginx代理与后端的服务器连接默认为短连接,而Nginx与前端的连接默认为长连接。就会变成客户端跟Nginx代理服务器使用HTTP 1.1协议建立长连接,而Nginx代理服务器跟后端服务器使用HTTP 1.0协议建立短连接,那么一个用户连接可能就会产生多次代理和后端的短连接。因此我们需要去配置Nginx代理服务器和后端服务器也建立长连接。
  相关配置参数如下:

Syntax: keepalive connections;
Default:    —
Context:    upstream

1、comectians参数设置nginx每个工作进程的缓存中保留的与后端服务器的空闲长连接的最大数量,超过此数目时,将关闭最近最少使用的连接。
2、但是它并不会限制工作进程可以打开的与后端服务器的连接总数。
3、comectians参数的设置应足够小(不然可能存在大量空闲的长连接),以使的后端服务器可以很好的处理新的传入连接。
4、以上是官网解释,当然还是要根据网站实际情况来设置,例如可以根据网站响应时间和每秒请求数QPS来计算设置多少好。

注:此配置位于ngx_http_upstream_module模块。同样也有对长连接超时时间和最大请求数的定义,含义用法和上面一样,不再赘述。

# 设置用于代理的HTTP协议版本
Syntax: proxy_http_version 1.0 | 1.1;
Default:    proxy_http_version 1.0;
Context:    http, server, location

注:此配置位于ngx_http_proxy_module模块

  代理设置,应将使用的HTTP协议设置为”1.1",并清除从客户端传递过来HTTP 头信息的"Connection"字段。例如:

upstream http_backend {   
    server 127.0.0.1:8080;
    keepalive 16;
}

server {
    ...

    location /http/ {
        proxy_pass http://http_backend;
        proxy_http_version 1.1;             
        proxy_set_header Connection "";
        ...
    }
}

  对于FastCGI服务器,需要设置fastcgi keep conn才能使keepalive连接正常工作,另外对于SCGI和uwsgi协议没有保持连接的概念。

upstream fastcgi_backend {
    server 127.0.0.1:9000;
    keepalive 8;
}

server {
    ...

    location /fastcgi/ {
        fastcgi_pass fastcgi_backend;
        fastcgi_keep_conn on;
        ...
    }
}

发表评论

验证码: − 1 = 9