HTTPS是加密資料傳輸協議,安全性高。當您需要進行HTTPS安全改造時,您可以使用應用型負載平衡ALB將HTTP訪問重新導向至HTTPS,讓使用者在無感知的情況下將HTTP訪問重新導向至HTTPS。
功能簡介
ALB提供HTTP到HTTPS的重新導向功能。通過配置監聽轉寄規則,將HTTP協議的請求重新導向到HTTPS,從而確保資料轉送加密,防止中間人攻擊和資料泄露,協助使用者構建符合現代安全標準的網路架構。
關鍵特性
靈活配置:支援自訂重新導向規則,可以基於路徑、HTTP標題等參數設定特定的重新導向策略,滿足複雜應用情境的需求。
狀態代碼設定:支援選擇不同的HTTP狀態代碼進行重新導向,如301(永久重新導向)或302(臨時重新導向)。
效能最佳化:將重新導向邏輯轉移到負載平衡層,後端伺服器無需處理重新導向邏輯,專註於核心業務處理,提升整體效率。
應用情境
HTTPS安全改造:將現有網站或應用程式從HTTP改造為HTTPS,提升使用者和伺服器之間通訊的安全性。
網域名稱更改/網站遷移:當網站遷移到新的網域名稱時,使用重新導向可以保持使用者訪問的連續性,避免流量損失。
基於HTTP標題重新導向:根據HTTP標題資訊(如語言、裝置類型等),將使用者請求重新導向至不同的HTTPS應用,實現個人化服務。
情境樣本
某企業在阿里雲華東1(杭州)地區購買的ALB執行個體部署了業務並對外提供服務。企業希望在網域名稱保持不變的情況下,將HTTP協議切換為HTTPS協議,以實現資料加密,並提升使用者體驗的流暢性與多樣性。
前提條件
已建立公網ALB執行個體(基礎版、標準版和WAF增強版均支援)。
已為ALB執行個體建立伺服器組(後端協議為HTTP)。
已在ALB執行個體的伺服器組中分別添加ECS01和ECS02執行個體,並在ECS01和ECS02中均部署了應用服務。
本文以Alibaba Cloud Linux 3作業系統為例,並使用Nginx配置HTTP 80服務。
已為ALB執行個體建立HTTP監聽。
已註冊自有網域名稱並完成ICP備案,且通過自有網域名稱為ALB配置CNAME解析。
已建立並申請認證或者上傳第三方認證到SSL認證服務並綁定自有網域名稱。
操作步驟
本文通過以下兩種方式介紹通過ALB實現HTTP訪問重新導向至HTTPS,您可以按需配置:
HTTP連接埠所有請求重新導向至HTTPS:無條件地將所有到達ALB的HTTP請求重新導向到HTTPS,適用於強制要求所有訪問都使用HTTPS的情境,例如全站啟用HTTPS或統一安全性原則。
基於HTTP標題重新導向至HTTPS:基於HTTP要求標頭(如語言、裝置類型等)進行條件判斷,只有滿足特定條件的請求才會被重新導向。適用於需按條件區分跳轉目標的情境,例如,可以根據使用者語言偏好重新導向到不同的語言版本網站,或者根據裝置類型(手機、平板、PC)或瀏覽器版本,將請求重新導向到移動端或案頭端的HTTPS版本。
HTTP連接埠所有請求均重新導向至HTTPS
步驟一:配置HTTPS監聽
在應用型負載平衡ALB控制台頂部功能表列選擇ALB執行個體所屬地區。
在ALB執行個體頁面,單擊目標執行個體ID。
在監聽頁簽,單擊建立監聽。
在負載平衡業務設定精靈頁面,完成以下配置,然後單擊下一步。
此處僅列出和本文強相關的配置項,HTTPS監聽其他參數配置可保持預設值或根據實際情況修改。
在配置監聽設定精靈,選擇監聽協議為HTTPS,監聽連接埠為443,然後單擊下一步。
在配置SSL認證設定精靈,選擇已建立好的伺服器憑證。然後單擊下一步。
在選擇伺服器組設定精靈,選擇已建立好的伺服器組,並查看後端伺服器資訊,然後單擊下一步。
在組態稽核設定精靈頁面,確認配置資訊,單擊提交。
步驟二:配置監聽轉寄規則
在監聽頁簽,找到已建立的HTTP監聽,然後在操作列單擊查看/編輯轉寄規則。
在轉寄規則頁簽,單擊插入新規則。
在插入轉寄規則地區,配置下表參數,然後單擊確定。
此處僅列出和本文強相關的配置項,轉寄規則其他參數配置可保持預設值或根據實際情況修改。
參數
說明
轉寄條件
選擇路徑並輸入/*。
轉寄動作
選擇重新導向至。
協議:本樣本選擇HTTPS。
連接埠:輸入您已建立的HTTPS協議監聽連接埠。本文輸入443。
狀態代碼:本樣本保持預設值301。
步驟三:結果驗證
以任意一台可以訪問公網的終端為例,測試訪問ALB的HTTP請求是否能夠重新導向至HTTPS。
開啟終端的命令列視窗。
執行
curl -v -L http://<自有網域名稱>。執行命令後,收到狀態代碼301,表示訪問ALB的請求重新導向至HTTPS,應答伺服器為ECS01。
curl -v http://xxx * Connected to xxx (xxx) port 80 (#0) > GET / HTTP/1.1 > Host: xxx > User-Agent: curl/7.88.1 > Accept: */* > < HTTP/1.1 301 Moved Permanently < Date: xxx < Content-Type: text/html < Content-Length: 134 < Connection: keep-alive < Location: https://xxx/ < * Connected to xxx (xxx) port 443 (#1) * TLSv1.2 (OUT), TLS header, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2> GET / HTTP/2 > Host: xxx > user-agent: curl/7.88.1 > accept: */* > < HTTP/2 200 < date: xxx < content-type: text/html < content-length: 32 < server: Tengine < Hello World ! This is ECS01.重複執行命令,應答伺服器變為ECS02。
curl -v http://xxx * Connected to xxx (xxx) port 80 (#0) > GET / HTTP/1.1 > Host: xxx > < HTTP/1.1 301 Moved Permanently < Location: https://xxx/ < * Connected to xxx (xxx) port 443 (#1) * SSL connection using TLSv1.2> GET / HTTP/2 > Host: xxx > user-agent: curl/7.88.1 > accept: */* > < HTTP/2 200 < date: xxx < content-type: text/html < content-length: 32 < server: Tengine < Hello World ! This is ECS02.
基於HTTP標題重新導向至HTTPS
本文以HTTP標題Accept-Language是zh-CN,zh的HTTP請求重新導向至HTTPS為例。
步驟一:配置HTTPS監聽
在應用型負載平衡ALB控制台頂部功能表列選擇ALB執行個體所屬地區。
在ALB執行個體頁面,單擊目標執行個體ID。
在監聽頁簽,單擊建立監聽。
在負載平衡業務設定精靈頁面,完成以下配置,然後單擊下一步。
此處僅列出和本文強相關的配置項,HTTPS監聽其他參數配置可保持預設值或根據實際情況修改。
在配置監聽設定精靈,選擇監聽協議為HTTPS,監聽連接埠為443,然後單擊下一步。
在配置SSL認證設定精靈,選擇已建立好的伺服器憑證。然後單擊下一步。
在選擇伺服器組設定精靈,選擇已建立好的伺服器組,並查看後端伺服器資訊,然後單擊下一步。
在組態稽核設定精靈頁面,確認配置資訊,單擊提交。
步驟二:配置監聽轉寄規則
在監聽頁簽,找到已建立的HTTP監聽,然後在操作列單擊查看/編輯轉寄規則。
在轉寄規則頁簽,單擊插入新規則。
在插入轉寄規則地區,配置下表參數,然後單擊確定。
此處僅列出和本文強相關的配置項,轉寄規則其他參數配置可保持預設值或根據實際情況修改。
參數
說明
轉寄條件
選擇HTTP標題。
鍵是:本樣本輸入Accept-Language。
值是:本樣本輸入zh-CN,zh。
轉寄動作
選擇重新導向至。
協議:本樣本選擇HTTPS。
網域名稱:輸入您的自有網域名稱。
連接埠:輸入您已建立的HTTPS協議監聽連接埠。本文輸入443。
狀態代碼:本樣本選擇302。
步驟三:結果驗證
以任意一台可以訪問公網的終端為例,測試訪問ALB的HTTP請求是否能夠重新導向至HTTPS。
開啟終端的命令列視窗。
執行
curl -v -L -H "Accept-Language: zh-CN,zh" http://<自有網域名稱>.執行命令後,收到狀態代碼302,表示訪問ALB的請求重新導向至HTTPS,應答伺服器為ECS01。
curl -v -H "Accept-Language: zh-CN,zh" http://xxx * Connected to xxx (xxx) port 80 (#0) > GET / HTTP/1.1 > Host: xxx > User-Agent: curl/7.88.1 > Accept: */* > Accept-Language: zh-CN,zh > < HTTP/1.1 302 Found < Date: xxx < Content-Type: text/html < Content-Length: 134 < Connection: keep-alive < Location: https://xxx/ < * Connected to xxx (xxx) port 443 (#1) * TLSv1.2 (OUT), TLS header, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2> GET / HTTP/2 > Host: xxx > user-agent: curl/7.88.1 > accept: */* > accept-language: zh-CN,zh > < HTTP/2 200 < date: xxx < content-type: text/html < content-length: 32 < server: Tengine < Hello World ! This is ECS01.重複執行命令,應答伺服器變為ECS02。
curl -v -H "Accept-Language: zh-CN,zh" http://xxx * Connected to xxx (xxx) port 80 (#0) > GET / HTTP/1.1 > Host: xxx > Accept-Language: zh-CN,zh > < HTTP/1.1 302 Found < Location: https://xxx/ < * Connected to xxx (xxx) port 443 (#1) * SSL connection using TLSv1.2> GET / HTTP/2 > Host: xxx > user-agent: curl/7.88.1 > accept: */* > accept-language: zh-CN,zh > < HTTP/2 200 < date: xxx < content-type: text/html < content-length: 32 < server: Tengine < Hello World ! This is ECS02.
重新導向狀態代碼說明
ALB重新導向狀態代碼預設為301,您可以根據業務需求選擇其他重新導向狀態代碼。ALB支援的重新導向狀態代碼及說明如下:
狀態代碼 | 說明 |
301 | 永久移動。請求的資源已被永久移動至新的URL,建議用戶端的請求都使用新的URL代替。 |
302 | 臨時移動。請求的資源只是臨時被移動,用戶端應繼續使用原有URL訪問。 |
303 | 與302類似表示資源的臨時移動,無論原始要求方法是什麼,要求用戶端在重新導向後使用GET方法發起請求。 |
307 | 與302類似表示資源的臨時移動,但用戶端必須保持原要求方法(如POST請求重新導向後仍為POST,不允許POST轉為GET)。 |
308 | 與301類似表示資源的永久移動,用戶端必須保持原要求方法(如POST請求重新導向後仍為POST,不允許POST轉為GET)。 |
關於狀態代碼說明的更多資訊請參見HTTP/1.1標準(RFC 7231)。
相關文檔
若您的業務有更高的安全需求,您可以進一步瞭解ALB的以下功能:
全鏈路HTTPS加密通訊:ALB提供全鏈路HTTPS加密功能,可以實現用戶端到ALB、ALB到後端伺服器之間的全鏈路加密通訊,提升敏感業務的安全性。
HTTPS雙向認證:ALB提供HTTPS雙向認證功能,在用戶端與服務端建立串連之前,雙方需進行身分識別驗證。僅在雙方均成功通過認證後,方可建立安全通訊通道進行資料轉送,從而確保只有授權的用戶端能夠訪問接入,有效降低中間人攻擊和未授權訪問等安全風險。
瞭解更多關於監聽的轉寄條件以及轉寄動作,請參見配置監聽轉寄規則。
通過ALB監聽轉寄規則還可以實現以下情境需求: