在全球加速中配置HTTP/2协议回源

当您的HTTPS服务已配置全球加速,并且计划引入HTTP/2协议版本来进一步提升服务性能时,您可以在全球加速中配置HTTP/2协议版本回源。通过此配置,HTTPS服务可以充分利用HTTP/2的优势,大幅提升服务性能,有效降低延迟及网络开销,提升整体访问体验。

什么是HTTP/2协议

HTTP/2也被称为HTTP2.0,相对于HTTP/1.1新增了多路复用、压缩HTTP头、划分请求优先级和服务端推送等特性,解决了在HTTP/1.1中一直存在的问题,优化了请求性能,同时兼容了HTTP/1.1的语义。目前,Chrome、Edge、Safari和Firefox等浏览器已经支持HTTP/2协议。

HTTP/2的优势:

  • 二进制协议:相比于HTTP 1.x基于文本的解析,HTTP/2将所有的传输信息分割为更小的消息和帧,并对它们采用二进制格式编码。基于二进制可以使协议有更多的扩展性。例如,引入帧来传输数据和指令。

  • 多路复用(MultiPlexing):在HTTP1.x中,我们经常会使用到雪碧图、使用多个域名等方式来优化性能,因为浏览器限制了同一个域名下的请求数量,当页面需要请求很多资源的时候,队头阻塞(Head of line blocking)会导致在达到最大请求时,资源需要等待其他资源请求完成后才能继续发送。HTTP2.0中,基于二进制分帧层,HTTP2.0可以在共享TCP连接的基础上同时发送请求和响应,在另一端根据流标识符和首部将他们重新组装起来,通过该技术,可以避免HTTP旧版本的队头阻塞问题,极大提高传输性能。

  • Header压缩(Header compression):HTTP请求头带有大量信息,而且每次都要重复发送。HTTP/2采用HPACK格式进行压缩传输,通讯双方各自缓存一份头域索引表,相同的消息头只发送索引号,从而提高效率和速度。

如何协商HTTP/2

在HTTPS的协议协商中,客户端与服务端必须建立TLS连接后才能发送应用数据。引入HTTP/2协议版本后,需要在协商机制中加入应用层协议协商ALPN(Application Layer Protocol Negotiation),客户端和服务端会通过ALPN协商确定使用的协议版本。

全球加速中指定HTTP/2协议回源后,在TLS握手过程中,全球加速会在Client Hello的ALPN字段中指定支持的协议版本为h2,同时会忽略服务端在Server Hello的ALPN字段中响应的协议版本,强制使用HTTP/2协议版本回源。

场景示例

本文以下图场景为例。某企业的总部在美国硅谷,总部使用阿里云服务器ECS部署了HTTPS网站,客户端主要分布在中国香港。同时,该企业已部署全球加速服务,用于解决因跨国公网不稳定,而带来的延迟、抖动、丢包等网络问题。

为了进一步改进网站性能,提高用户访问体验,该企业计划引入HTTP/2协议。

由于全球加速配置后端服务协议为HTTPS时,默认以HTTP/1.1协议版本回源。该企业现需要修改全球加速实例配置,指定HTTP/2协议版本回源,从而充分体验该协议版本所带来的性能改进。

image

使用限制

全球加速配置HTTP/2协议版本回源,有以下使用限制:

  • 配置协议版本功能默认不开放。如需使用,请向商务经理申请。

  • 不支持WebSocket协议。

  • 不支持HTTP/2协议中的服务器推送(Server Push)特性。

  • 不支持加速以HTTP/2为基础的gRPC请求。

前提条件

  • 您已在证书中心购买或上传服务器证书。具体操作,请参见购买SSL证书上传和分享SSL证书

  • 您已将证书文件上传至后端服务器。具体操作,请参见通过云助手上传文件到ECS实例

  • 您的后端服务器已部署了HTTPS 443服务,并启用了HTTP/2协议版本。

    请确保已在后端服务器所属安全组规则入方向添加TCP 443端口。具体操作,请参见添加安全组规则

    参考示例:在阿里云ECS中使用Nginx配置HTTPS 443服务并启用HTTP/2

    1. 执行以下命令,安装Nginx,并部署测试应用示例。

      yum install -y nginx
      cd /usr/share/nginx/html/
      echo "Hello World ! This is ECS." > index.html
    2. 执行以下命令,创建证书与私钥目录。

      mkdir -p /etc/pki/nginx/private/
    3. 执行以下命令进入Nginx配置文件nginx.conf,修改协议版本配置,然后保存并退出。

      vim /etc/nginx/nginx.conf

      配置如下:

      # For more information on configuration, see:
      #   * Official English Documentation: http://nginx.org/en/docs/
      #   * Official Russian Documentation: http://nginx.org/ru/docs/
      
      user nginx;
      worker_processes auto;
      error_log /var/log/nginx/error.log;
      pid /run/nginx.pid;
      
      
      events {
          worker_connections 1024;
      }
      
      http {
          log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" "$http_x_forwarded_for" "$server_protocol"';
          access_log  /var/log/nginx/access.log  main;
          sendfile            on;
          tcp_nopush          on;
          tcp_nodelay         on;
          keepalive_timeout   65;
          types_hash_max_size 4096;
      
          include             /etc/nginx/mime.types;
          default_type        application/octet-stream;
          server {
              #启用HTTP/2协议版本
              listen       443 ssl http2;
              listen       [::]:443 ssl http2;
              server_name  _;
              root         /usr/share/nginx/html;
      
              #填写证书文件路径
              ssl_certificate "/etc/pki/nginx/<cert-file-name>.pem";
              #填写证书私钥文件路径
              ssl_certificate_key "/etc/pki/nginx/private/<cert-file-name>.key";
              ssl_session_cache shared:SSL:1m;
              ssl_session_timeout  10m;
              ssl_ciphers PROFILE=SYSTEM;
              ssl_prefer_server_ciphers on;
      
      
              error_page 404 /404.html;
                  location = /40x.html {
              }
      
              error_page 500 502 503 504 /50x.html;
                  location = /50x.html {
              }
          }
      
      }
    4. 执行以下命令,重启Nginx服务。

      systemctl restart nginx.service
  • 您已创建全球加速实例,并已将后端服务器添加为全球加速的终端节点,设置后端服务协议为HTTPS。具体操作,请参见创建和管理标准型全球加速实例

  • 证书绑定的域名已完成DNS解析,即您的域名与全球加速实例分配的CNAME地址相互映射。具体操作,请参见配置CNAME

配置HTTP/2协议回源

此处仅介绍本文场景所涉及的关键配置项,关于终端节点组配置项更多信息,请参见添加和管理智能路由类型监听的终端节点组

  1. 登录全球加速管理控制台

  2. 实例列表页面,找到目标全球加速实例,在操作列单击配置监听

  3. 监听页签下,找到目标监听,然后在操作列单击编辑节点组

  4. 配置监听和协议配置向导页面,单击下一步

  5. 配置终端节点配置向导页面,配置协议版本HTTP/2,然后单击下一步

    选择HTTP2.png

  6. 配置审核配置向导页面,确认信息,然后单击提交

结果验证

您可以在终端节点组中配置协议版本为HTTP/2之前以及之后,分别执行以下操作步骤,以验证HTTP/2回源协议是否生效。

  1. 在中国香港地域客户端打开浏览器,输入https://<加速域名>,可以正常访问后端服务。

  2. 在美国硅谷地域的后端服务器打开命令行窗口,执行以下命令,查看最近一次的访问记录。

    通过返回的访问记录详情,可以查看访问请求转发至后端服务器所使用的协议版本。

    tail -n 1 /var/log/nginx/access.log

    配置协议版本前,返回访问记录如下:默认HTTP1.1回源.png配置协议版本为HTTP/2后,返回访问记录如下:

    HTTP2回源.png