當您的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協議版本回源,有以下使用限制:
配置協議版本功能默認不開放。如需使用,請向商務經理申請。
不支持WebSocket協議。
不支持HTTP/2協議中的服務器推送(Server Push)特性。
不支持加速以HTTP/2為基礎的gRPC請求。
前提條件
您已在證書中心購買或上傳服務器證書。具體操作,請參見購買SSL證書和上傳和分享SSL證書。
您已將證書文件上傳至后端服務器。具體操作,請參見通過云助手上傳文件到ECS實例。
您的后端服務器已部署了HTTPS 443服務,并啟用了HTTP/2協議版本。
請確保已在后端服務器所屬安全組規則入方向添加TCP 443端口。具體操作,請參見添加安全組規則。
執行以下命令,安裝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后,返回訪問記錄如下: