当您的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协议版本回源,从而充分体验该协议版本所带来的性能改进。
使用限制
全球加速配置HTTP/2协议版本回源,有以下使用限制:
前提条件
您已在证书中心购买或上传服务器证书。具体操作,请参见购买SSL证书和上传和分享SSL证书。
您已将证书文件上传至后端服务器。具体操作,请参见通过云助手上传文件到ECS实例。
您的后端服务器已部署了HTTPS 443服务,并启用了HTTP/2协议版本。
请确保已在后端服务器所属安全组规则入方向添加TCP 443端口。具体操作,请参见添加安全组规则。
参考示例:在阿里云ECS中使用Nginx配置HTTPS 443服务并启用HTTP/2
执行以下命令,安装Nginx,并部署测试应用示例。
yum install -y nginx
cd /usr/share/nginx/html/
echo "Hello World ! This is ECS." > index.html
执行以下命令,创建证书与私钥目录。
mkdir -p /etc/pki/nginx/private/
执行以下命令,进入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 {
}
}
}
执行以下命令,重启Nginx服务。
systemctl restart nginx.service
您已创建全球加速实例,并已将后端服务器添加为全球加速的终端节点,设置后端服务协议为HTTPS。具体操作,请参见创建和管理标准型全球加速实例。
证书绑定的域名已完成DNS解析,即您的域名与全球加速实例分配的CNAME地址相互映射。具体操作,请参见配置CNAME。
配置HTTP/2协议回源
此处仅介绍本文场景所涉及的关键配置项,关于终端节点组配置项更多信息,请参见添加和管理智能路由类型监听的终端节点组。
登录全球加速管理控制台。
在实例列表页面,找到目标全球加速实例,在操作列单击配置监听。
在监听页签下,找到目标监听,然后在操作列单击编辑节点组。
在配置监听和协议配置向导页面,单击下一步。
在配置终端节点配置向导页面,配置协议版本为HTTP/2,然后单击下一步。
在配置审核配置向导页面,确认信息,然后单击提交。
结果验证
您可以在终端节点组中配置协议版本为HTTP/2之前以及之后,分别执行以下操作步骤,以验证HTTP/2回源协议是否生效。
在中国香港地域客户端打开浏览器,输入https://<加速域名>
,可以正常访问后端服务。
在美国硅谷地域的后端服务器打开命令行窗口,执行以下命令,查看最近一次的访问记录。
通过返回的访问记录详情,可以查看访问请求转发至后端服务器所使用的协议版本。
tail -n 1 /var/log/nginx/access.log
配置协议版本前,返回访问记录如下:配置协议版本为HTTP/2后,返回访问记录如下: