設定階段作業親緣性

載入網站通常需要從網頁伺服器擷取多個資源。CIS 的會話親和性機制能自動將來自相同客戶端的請求導向同一起源網頁伺服器,從而減少冗餘的網路請求。

CIS 會在對用戶端的起始回應上設定 Cookie。 除非原點無法使用,否則在後續用戶端要求中使用 Cookie 可確保將那些要求傳送至相同的原點。

啟用時,CIS 階段作業親緣性會執行下列動作:

  • 當用戶端提出其第一個要求時,CIS 會在用戶端上設定 CFLib Cookie。 Cookie 會將要求轉遞至的來源編碼。
  • 相同用戶端的後續要求會在 Cookie 期間轉遞至該原點,只要原點伺服器保持性能良好即可。
  • 如果 Cookie 到期或原點伺服器性能不佳,CIS 會設定新的 Cookie 來編碼適當的失效接手原點。

除非在 30 分鐘到 7 天之間指定自訂階段作業 TTL (以秒為單位),否則所有階段作業都預設為 23 小時。 需要階段作業親緣性 Cookie 才能允許使用 TTL。 當啟用 Always Use HTTPS 時,會話 cookie 是安全的。 此外,請務必為 cookie 啟用 HttpOnly 以防止跨網站腳本攻擊。

從命令列介面設定工作階段親和性

當您透過命令列介面建立全域負載平衡器時,請依循以下步驟設定會話親和性:

  1. 登入 IBM Cloud 帳戶。
  2. 建立廣域負載平衡器。
  3. 請設定以下 CLI 變數:

若您需要在會話親和性 Cookie 中設定特定的 SameSite 值, CIS 建議您為 `samesite` 和 `secure` 提供不同於 `Auto``` 的數值,而非依賴預設行為。 如此一來,SameSite cookie 屬性的值便不會因設定變更(即「始終使用 HTTPS」)而改變。

session_affinity:有效值為 cookienone

ttl: 此負載平衡器所建立的會話親和性 Cookie 自建立之日起,至其過期為止的剩餘時間(以秒為單位)。 1800604800 之間的有效值。 預設值為 82800

session_affinity_attributes: 會話親和性 Cookie 的屬性。

samesite

有效值為: * Auto(預設):如果啟用 「始終使用 HTTPS,則會話關聯 cookie 使用 Lax 模式;如果停用,則使用 cookie None 模式。 * None:Cookie 隨所有請求一起發送。 * Lax:Cookie 僅會傳送到頂級網域(例如 example.com )。 * Strict:Cookie 由第一方(造訪的網域)建立。

secure

有效值為: * Auto(預設):如果啟用 「始終使用 HTTPS,則會話關聯 cookie 使用 securesamesite 屬性;如果停用,則不會使用 cookie secure。 * Always: secure 始終被設置,這意味著 cookie 僅透過 HTTPS 連接發送。 * Never: secure 永遠不會設置,允許透過 HTTPS 和 HTTP 連接發送 cookie。

drain_duration

選用。 源將耗盡活動會話的時間(以秒為單位)。 經過該時間後,所有現有會話都將結束。

zero_downtime_failover

選用。 在暫時性網路問題期間自動將流量傳送到池內的端點。 值是: * none (預設):不會發生故障轉移,並且可能會向使用者顯示錯誤。 * temporary:流量被傳送到其他端點,直到最初固定的端點可用。 * sticky:會話關聯 cookie 已更新,後續請求將根據需要傳送到新端點。

針對透過 HTTP 標頭設定的會話親和性,系統不支援黏性零停機時間故障轉移功能。

例如:

ibmcloud cis glb-update fc72db47cee8290eaef292cda6e1619a 12b68758126546e0d129c7bbadfa87f0 --json '{"session_affinity":"cookie","session_affinity_ttl":1800,"session_affinity_attributes":{"samesite":"Auto","secure":"Auto"}}'

透過 API 設定工作階段親和性

會話關聯性是全域負載平衡器的屬性,您可以使用下列端點進行設定:

使用 session_affinitysession_affinity_ttlsession_affinity_attributes 參數自訂會話關聯性的行為。

若要透過 HTTP 標頭啟用會話關聯性,請設定 session_affinity 價值 header 並將您的 HTTP 標頭名稱新增至 session_affinity_attributes.headers

當您使用 API 建立廣域負載平衡器時,請採取下列步驟來設定階段作業親緣性:

  1. 請使用正確的變數來設定您的 API 環境。

  2. 將下列值儲存在要在 API 指令中使用的變數中:

    • session_affinity,指定負載平衡器使用的階段作業親緣性類型,除非指定為 "none" 或 "default"。 有效值為 none、cookieip_cookie
    • session_affinity_ttl,這是階段作業親緣性的存活時間。
    • session_affinity_attributes,其中包括:
      • samesite 會在親緣性 Cookie 上配置 SameSite 屬性。 有效值為 AutoLaxNoneStrict ;預設 Auto

      • secure 會在階段作業親緣性 Cookie 上配置「安全」屬性。 有效值為 AutoAlwaysNever ;預設 Auto

      • drain_duration 是排除持續時間的值 (以秒為單位)。

      • zero_downtime_failover (可選)在短暫的網路問題期間自動將流量傳送到池中的端點。 Value 值為 temporarysticky ;預設 none

        針對透過 HTTP 標頭設定的會話親和性,系統不支援黏性零停機時間故障轉移功能。

  3. 起始所有變數時,請建立具有階段作業親緣性的廣域負載平衡器:

curl -X POST   https://api.cis.cloud.ibm.com/v1/:crn/zones/:zone_id/load_balancers   -H 'content-type: application/json'   -H 'x-auth-user-token: Bearer xxxxxx'   -d '{
    "description": "",
    "proxied": true,
    "enabled": true,
    "name": "www.example.com",
    "session_affinity": "none",
    "session_affinity_ttl": 5000,
    "steering_policy": "geo",
    "fallback_pool": "4112ba6c2974ec43886f90736968e838",
    "default_pools": [
        "6563ebae141638f92ebbdc4a821bef8c",
        "4112ba6c2974ec43886f90736968e838"
    ],
    "pop_pools": {},
    "region_pools": {
        "EEU": [
            "4112ba6c2974ec43886f90736968e838"
        ],
        "ENAM": [
            "6563ebae141638f92ebbdc4a821bef8c"
        ],
        "WEU": [
            "4112ba6c2974ec43886f90736968e838"
        ],
        "WNAM": [
            "6563ebae141638f92ebbdc4a821bef8c"
        ]
    }
}'

如果您在 API 請求中將 samesite 設定為 None,則無法將 secure 設定為 Never