全部產品
Search
文件中心

Global Accelerator:在Global Acceleration中配置HTTP/2協議回源

更新時間:Aug 06, 2024

當您的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協議版本回源,有以下使用限制:

  • 配置協議版本功能預設不開放。如需使用,請向商務經理申請。

  • 不支援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
  • 您已建立Global Accelerator執行個體,並已將後端伺服器添加為Global Acceleration的終端節點,設定後端服務合約為HTTPS。具體操作,請參見建立和管理標準型Global Acceleration執行個體

  • 認證綁定的網域名稱已完成DNS解析,即您的網域名稱與Global Accelerator執行個體分配的CNAME地址相互映射。具體操作,請參見配置CNAME

配置HTTP/2協議回源

此處僅介紹本文情境所涉及的關鍵配置項,關於終端節點群組配置項更多資訊,請參見添加和管理智能路由類型監聽的終端節點群組

  1. 登入Global Acceleration管理主控台

  2. 執行個體列表頁面,找到目標Global Acceleration執行個體,在操作列單擊配置監聽

  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