Nginx与Tomcat、Client之间请求的长连接配置不一致问题分析解决
  bAB2KcLKpirZ 2023年11月02日 95 0


nginx

1. Nginx - 反向代理
nginx.conf:

http {
    ...

    ##

    # 与Client连接的长连接配置

    ##

    # http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_requests

    # 设置通过"一个存活长连接"送达的最大请求数(默认是100,建议根据客户端在"keepalive"存活时间内的总请求数来设置)

    # 当送达的请求数超过该值后,该连接就会被关闭。(通过设置为5,验证确实是这样)

    keepalive_requests 8192;

 

    # http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout

    # 第一个参数设置"keep-alive客户端长连接"将在"服务器端"继续打开的超时时间(默认是75秒,建议根据具体业务要求来,但必须要求所有客户端连接的"Keep-Alive"头信息与该值设置的相同(这里是5分钟),同时与上游服务器(Tomcat)的设置是一样的)

    # 可选的第二个参数设置“Keep-Alive: timeout=time”响应头字段的值

    keepalive_timeout 300s 300s;

 

    ...

    include /etc/nginx/web_servers.conf;

    include /etc/nginx/proxy_params;

}

web_servers.conf:
upstream web_server {
    server 127.0.0.1:8080;

    # http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive

    # 连接到上游服务器的最大并发空闲keepalive长连接数(默认是未设置,建议与Tomcat Connector中的maxKeepAliveRequests值一样)

    # 当这个数被超过时,使用"最近最少使用算法(LUR)"来淘汰并关闭连接。

    keepalive 768;
}

server {

    listen 80;

    server_name lihg.com www.lihg.com;

 

    location / {

        proxy_pass http://web_server;

 

        ##

        # 与上游服务器(Tomcat)建立keepalive长连接的配置,可参考上面的keepalive链接里的"For HTTP"部分

        ##

        # http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_http_version

        # 设置代理的HTTP协议版本(默认是1.0版本)

        # 使用keepalive连接的话,建议使用1.1版本。

        proxy_http_version 1.1;

        # http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header

        # 允许重新定义或追加字段到传递给代理服务器的请求头信息(默认是close)

        proxy_set_header Connection "";

 

        proxy_redirect off;

    }

}

tomcat

2. Tomcat
conf/server.xml:
    <!-- 
        maxThreads:由此连接器创建的最大请求处理线程数,这决定可同时处理的最大并发请求数(默认为200)
        minSpareThreads:保持运行状态的最小线程数(默认为10)
        acceptCount:接收传入的连接请求的最大队列长度(默认队列长度为100)
        
        connectionTimeout:在接收一条连接之后,连接器将会等待请求URI行的毫秒数(默认为60000,60秒)
        maxConnections:在任何给定的时间,服务器能接收和处理的最大连接数(NIO的默认值为10000)

        keepAliveTimeout:在关闭这条连接之前,连接器将等待另一个HTTP请求的毫秒数(默认使用connectionTimeout属性值)
        maxKeepAliveRequests:在该连接被服务器关闭之前,可被流水线化的最大HTTP请求数(默认为100)
        
        enableLookups:启用DNS查询(默认是DNS查询被禁用)
        compression:连接器是否启用HTTP/1.1 GZIP压缩,为了节省服务器带宽
        compressionMinSize:指定输出响应数据的最小大小(默认为2048,2KB)
        compressableMimeType:可使用HTTP压缩的文件类型
        server:覆盖HTTP响应的Server头信息
     -->
    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="768"
               minSpareThreads="512"
               acceptCount="128"
               
               connectionTimeout="1000"
               maxConnections="1024"
               keepAliveTimeout="300000"
               maxKeepAliveRequests="768"
               
               enableLookups="false"
               URIEncoding="utf-8"
               redirectPort="8443"
               compression="on" compressionMinSize="1024" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json,application/xml"
               server="webserver" />


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
bAB2KcLKpirZ