當您的HTTPS服務已配置Global Acceleration,並且計劃引入HTTP/2協議版本來進一步提升服務效能時,您可以在Global Acceleration中配置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協商確定使用的協議版本。
Global Accelerator中指定HTTP/2協議回源後,在TLS握手過程中,Global Accelerator會在Client Hello的ALPN欄位中指定支援的協議版本為h2,同時會忽略服務端在Server Hello的ALPN欄位中響應的協議版本,強制使用HTTP/2協議版本回源。
情境樣本
本文以下圖情境為例。某企業的總部在美國矽谷,總部使用阿里雲伺服器ECS部署了HTTPS網站,用戶端主要分布在中國香港。同時,該企業已部署Global Accelerator服務,用於解決因跨國公網不穩定,而帶來的延遲、抖動、丟包等網路問題。
為了進一步改進網站效能,提高使用者訪問體驗,該企業計劃引入HTTP/2協議。
由於Global Accelerator配置後端服務合約為HTTPS時,預設以HTTP/1.1協議版本回源。該企業現需要修改Global Accelerator執行個體配置,指定HTTP/2協議版本回源,從而充分體驗該協議版本所帶來的效能改進。
使用限制
Global Acceleration配置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
您已建立Global Accelerator執行個體,並已將後端伺服器添加為Global Acceleration的終端節點,設定後端服務合約為HTTPS。具體操作,請參見建立和管理標準型Global Acceleration執行個體。
認證綁定的網域名稱已完成DNS解析,即您的網域名稱與Global Accelerator執行個體分配的CNAME地址相互映射。具體操作,請參見配置CNAME。
配置HTTP/2協議回源
此處僅介紹本文情境所涉及的關鍵配置項,關於終端節點群組配置項更多資訊,請參見添加和管理智能路由類型監聽的終端節點群組。
登入Global Acceleration管理主控台。
在執行個體列表頁面,找到目標Global Acceleration執行個體,在操作列單擊配置監聽。
在監聽頁簽下,找到目標監聽,然後在操作列單擊編輯節點群組。
在配置監聽和協議設定精靈頁面,單擊下一步。
在配置終端節點設定精靈頁面,配置協議版本為HTTP/2,然後單擊下一步。
在組態稽核設定精靈頁面,確認資訊,然後單擊提交。
結果驗證
您可以在終端節點群組中配置協議版本為HTTP/2之前以及之後,分別執行以下操作步驟,以驗證HTTP/2回源協議是否生效。
在中國香港地區用戶端開啟瀏覽器,輸入https://<加速網域名稱>
,可以正常訪問後端服務。
在美國矽谷地區的後端伺服器開啟命令列視窗,執行以下命令,查看最近一次的訪問記錄。
通過返回的訪問記錄詳情,可以查看訪問請求轉寄至後端伺服器所使用的協議版本。
tail -n 1 /var/log/nginx/access.log
配置協議版本前,返回訪問記錄如下:配置協議版本為HTTP/2後,返回訪問記錄如下: