一、概述

        最常见的问题是很多个请求排队或被阻塞。这表示从单个客户端检索的资源太多。在 HTTP 1.0/1.1 连接协议中,Chrome 限制每个域名最多执行 6 个 TCP 连接。如果一次请求十二个资源,前 6 个将开始,后 6 个将排队。一旦其中一个请求完成,队列中的第一个请求项目将开始其请求过程。

二、解决方案

2.1 方案一: 升级 HTTP 2【推荐】

    方案一的方案修复HTTP 1.0/1.1 连接协议中连接数问题,不适用于 HTTP 2 连接,如果已部署 HTTP 2,不要对资源进行域划分,因为它会影响 HTTP 2 的工作原理(在 HTTP 2 中 TCP 连接多路复用连接的)。取消了 HTTP 1 的 6 个连接限制,并且可以通过单个连接同时传输多个资源。
解决方案:
采用https方式部署: 升级到HTTP/2
参考文档: https://zhuanlan.zhihu.com/p/29609078
文档重点内容 摘抄如下:

2.2.1 升级到HTTP/2

    要求nginx的最低版本是1.10.0,openssl的最低版本是1.0.2,http/2在实现上基本上只支持https。笔者的系统是centos 7,用yum安装的nginx是1.10.2,这个版本是可以的,但是系统的openssl是1.0.1,把系统的openssl update一下,变成1.0.2,但还是不可以。发现是因为nginx在编译的时候指定的openssl是1.0.1的,所以即使升级了系统的openssl也是没有用的,如下图所示:

那怎么升级呢?nginx官方提供了两种方法,第一种是升级操作系统,第二种是从源码编译新版本的nginx,我们用第二种方法。当前nginx最新的稳定版本是1.12.1,在服务器上执行以下命令:

wget http://nginx.org/download/nginx-1.12.1.tar.gz # 下载
tar -zxvf nginx-1.12.1.tar.gz # 解压
cd nginx-1.12.1
./configure # 确认系统环境,生成make文件
make # 编译
sudo make install #安装

configure的时候后面可以带参数,参数可以用原先老版本nginx的参数,包括安装路径之类的,这个可以通过执行nginx -V得到,使得新nginx的配置和老nginx一样。如果configure提示缺一些库的话就相应地做些安装,基本上就是它提示的库后面带上devel,如以下提示:

./configure: error: the Google perftools module requires the Google perftools
library. You can either do not enable the module or install the library.

可安装下面这个库解决:


sudo yum install gperftools-devel

新安装后的nginx的openssl版本就对了:

然后添加nginx配置,原本https的listen为:

listen 443 ssl;

现在在后面加上http2:

listen 443 ssl http2;

然后把nginx关了再开一下(因为新安装了一个nginx,要先关一下再开),这个时候再用浏览器访问,原本的http1.1:

就会变成http2:

2.2 方案二:多个子域名

    要解决传统HTTP 1.0/1.1 连接协议中连接数 的此问题,需要用多个子域名提供服务资源,将资源拆分到多个子域中,均匀分配。(参考淘宝使用该方法)
IBPS平台具体解决方案:
http://doc.bpmhome.cn/docs/ibps_v3_deploy/ibps_v3_deploy-1c9cgh4drc105

文档更新时间: 2022-09-26 09:42   作者:hugh