部分應用業務情境下需要保持使用者會話的狀態,例如購物車中的商品、登入資訊、使用者喜好設定、遊戲應用等情境,如果使用者的請求被分發到不同的伺服器,那麼工作階段狀態就會丟失從而導致使用者體驗問題。當您開啟了ALB會話保持功能後,可以使來自同一用戶端的請求被轉寄到同一台後端伺服器上,從而確保使用者的體驗和資料的一致性。
背景資訊
預設情況下,ALB會將每個用戶端請求分別分發至不同的後端伺服器上。當您開啟了會話保持功能後,會話保持可以使來自同一用戶端的請求被轉寄至同一台後端伺服器上,方便後端伺服器維護狀態資訊及向用戶端提供持續體驗。
-
未開啟會話保持:同一用戶端的請求通過ALB可能會被分發至不同的後端伺服器,在某些情境下,如登入後端伺服器擷取互動資訊等情境,用戶端的請求可能需重新登入後端伺服器。
-
開啟會話保持:同一用戶端的請求通過ALB被分配至同一台後端伺服器,而非分配至不同的後端伺服器,在某些情境下,如登入後端伺服器擷取互動資訊等情境,避免了用戶端的請求需要重新登入後端伺服器。
ALB開啟會話保持後,需要選擇Cookie的處理方式,有植入Cookie和重寫Cookie兩種處理方式。
-
植入Cookie:用戶端第一次訪問時,ALB會在返回請求中植入Cookie(即ALB插入SERVERID和SERVERCORSID兩個cookie;SERVERCORSID是以SERVERID為基礎,且加入了samesite=None這個屬性),下次用戶端攜帶此Cookie訪問,負載平衡服務會將請求定向轉寄給之前記錄到的後端伺服器上。
說明會話保持植入Cookie方式內建SameSite=None,無需使用者配置,可以有效解決ALB轉寄規則中跨域(CORS)情境下瀏覽器無法儲存Cookie的問題。
-
重寫Cookie:當ALB發現使用者自訂了Cookie,將會對原來的Cookie進行重寫,下次用戶端攜帶新的Cookie訪問,ALB會將請求定向轉寄給之前記錄的後端伺服器。
使用限制
伺服器群組類型為Function Compute類型時,您無需配置會話保持。更多操作,請參見建立/刪除伺服器組。
前提條件
-
您已經建立了一個處於運行中狀態的公網ALB執行個體。具體操作,請參見建立和管理ALB執行個體。
-
您已經建立了伺服器類型或IP類型的伺服器組。具體操作,請參見建立/刪除伺服器組。
-
您已經建立了後端伺服器ECS01和ECS02,用於接收請求。ECS01和ECS02中部署了不同的後端服務,訪問時需要有不同展示,例如訪問ECS01時返回
"Hello World ! This is ECS01.",返回ECS02時返回"Hello World ! This is ECS02."。注意安全性群組需要對相應服務連接埠允許存取。 -
您已將後端伺服器ECS01與ECS02添加到伺服器組中。具體操作,請參見添加/移除後端伺服器。
步驟一:配置會話保持
-
在頂部功能表列處,選擇後端伺服器組所屬的地區。
-
在左側導覽列,選擇。
-
在伺服器組頁面,找到目標伺服器組,在操作列單擊編輯基本資料。
-
在編輯基本資料對話方塊中,開啟會話保持。
開啟會話保持開關並選擇Cookie處理方式。
-
選擇植入Cookie,輸入會話保持逾時時間,然後單擊儲存。
逾時時間不宜設定過長(建議短串連情境設定為60~300秒),否則同一用戶端的請求會持續路由到同一台後端伺服器,可能導致負載不均衡。
-
選擇重寫Cookie,輸入Cookie名稱,然後單擊儲存。
本文樣本將Cookie名稱設定為
BACKEND_SERVER,該名稱僅為樣本,您可以自訂該名稱。
-
(可選)步驟二:後端伺服器配置Cookie
當伺服器組開啟會話保持,並且選擇的Cookie處理方式為重寫Cookie時,才需要在後端伺服器中配置對應的Cookie。
-
遠程登入ECS。具體操作,請參見ECS遠端連線操作指南。
-
根據不同的Web伺服器配置Cookie。
說明不同的Web伺服器對應的Cookie設定方法不同,以下列舉常見Web伺服器的設定方法,請您根據實際情況選擇,如果您使用的Web伺服器不在以下列表中,請您查閱對應的官方文檔擷取配置方法。
Nginx
此處以CentOS 7.9作業系統、Nginx 1.20.1 版本配置為例介紹。具體請以您實際使用的環境為準。
-
修改Nginx服務組態檔並儲存,修改點可參考下方說明。執行
nginx -t命令查看設定檔所在路徑,預設通常為/etc/nginx/nginx.conf,具體請以實際環境為準。http { # ... server { listen 80; # BACKEND_SERVER是您配置重寫Cookie時輸入的Cookie名稱;value您可使用自訂字串。 add_header Set-Cookie "BACKEND_SERVER=value"; # ... } } -
執行以下命令重新載入Nginx的設定檔。
sudo nginx -s reload
Apache
此處以CentOS 7.9作業系統、Apache 2.4.6版本配置為例介紹。具體請以您實際使用的環境為準。
-
修改Apache服務組態檔並儲存,修改點可參考下方說明。預設通常為
/etc/httpd/conf/httpd.conf,具體請以實際環境為準。# ... Listen 80 # BACKEND_SERVER是您配置重寫Cookie時輸入的Cookie名稱;value您可使用自訂字串。 Header always set Set-Cookie "BACKEND_SERVER=value" # ... -
執行以下命令,重新載入Apache的設定檔,使以上改動生效。
sudo systemctl reload httpd.service
-
-
參考以上步驟,修改伺服器組中其餘後端伺服器的配置。
步驟三:測試會話保持的有效性
-
在頂部功能表列選擇地區。找到目標ALB執行個體,複製其對應的DNS名稱。
-
在瀏覽器中輸入DNS名稱,可訪問某個伺服器,多次重新整理頁面仍然訪問相同伺服器。
例如您第一次訪問的是ECS01,則後續幾次重新整理後均是訪問ECS01。

如果多次重新整理頁面後在ECS01與ECS02之間切換,則會話保持配置不生效,請您檢查配置是否有誤再重新測試。
相關文檔
-
如果配置過程中遇到問題,您可參考ALB常見問題進行定位處理。
-
如果遇到健全狀態檢查異常問題,您可參考ALB健全狀態檢查異常排查方法。