最新公告
  • 欢迎您光临源码资源下载站,一个优质的网站源码和小程序源码分享基地。
  • Nginx Http 模块中 Upstream 的 keepalive 参数配置注意事项

    正文概述 建站知识   2023-12-15 21:14:25  
    在高并发环境下 keepalive 参数配置不当容易产生大量 TIME_WAIT,导致端口耗尽,服务异常。
    keepalive 值应该大于等于 upstream 中 server 的数量。(建议是 server 数的 2 倍)
    详细说明
    keepalive 用于设置保留在每个 nginx worker 缓存中『已经与上游服务器建立的空闲连接』的最大连接数,如果超过这个值,最近最少使用的连接将被关闭。
    Nginx 官方建议这个值应该尽可能小,以便让上游服务器也能处理新进入的连接。但是『尽可能小』有些太模糊,如果配置不当会降低性能以及产生其他问题。
    在大量短链接(或者大量分散用户)的请求场景下,同时 upstream 为轮询模式时,因为 keepalive 值小于 upstream server 数,upstream 新的空闲连接会从缓存中挤出老的空闲链接,导致 keepalive 在某种意义上失效。
    根据下面配置,以单个 nginx worker 处理请求为例,这里做个更详细的解释:
    upstream http_backend {
        server 10.0.0.1;
        server 10.0.0.2;
        server 10.0.0.3;
        keepalive 2;
    }
    server {
        ...
        location /http/ {
            proxy_pass http://http_backend;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            ...
        }
    }
    第一个请求进来,nginx 与 10.0.0.1 建立连接,请求处理完成后,nginx 与 10.0.0.1 的空闲连接被放入空闲连接池;
    第二个请求进来,nginx 与 10.0.0.2 建立连接,请求处理完成后,nginx 与 10.0.0.2 的空闲连接被放入空闲连接池;
    第三个请求进来,nginx 与 10.0.0.3 建立连接,请求处理完成后,因为最大空闲连接数为 2,连接数已满,所以 nginx 与 10.0.0.1 的空闲连接被 close,nginx 与 10.0.0.3 的空闲连接被放入空闲连接池;
    第四个请求进来,nginx 再次与 10.0.0.1 建立连接,请求处理完成后,因为最大空闲连接数为 2,连接数已满,所以 nginx 与 10.0.0.2 的空闲连接被 close,nginx 与 10.0.0.1 的空闲连接被放入空闲连接池
    。。。以此类推
    这种效果就像没有配置 keepalive
    挖个坑:以上内容根据实践经验以及推测而得出,待我用源码来证明 :)
    参考文档:
    nginx 官方文档: https://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive Nginx Http 模块中 Upstream 的 keepalive 参数配置注意事项
    皓玉源码网,一个优质的源码资源平台!
    皓玉源码网 » Nginx Http 模块中 Upstream 的 keepalive 参数配置注意事项