设置会话亲缘关系
装入 Web 站点通常需要从 Web 服务器访存多个资产。CIS 会话亲缘关系通过自动将来自同一客户机的请求定向到同一源 Web 服务器来最小化冗余网络请求。
CIS 在客户机的初始响应上设置 cookie。 在后续客户机请求中使用 cookie 可确保将这些请求发送到同一源,除非源不可用。
启用后,CIS 会话亲缘关系将执行以下操作:
- 当客户机发出第一个请求时,CIS 会在客户机上设置
CFLib
cookie。 Cookie 对请求转发到的源进行编码。 - 在 cookie 持续时间内,只要源服务器保持正常运行,同一客户机的后续请求将转发到该源。
- 如果 cookie 到期或源服务器运行状况不佳,那么 CIS 将设置新的 cookie,以编码相应的故障转移源。
除非在 30 分钟到 7 天之间指定了定制会话 TTL (以秒计),否则所有会话缺省为 23 小时。 需要会话亲缘关系 cookie 才能实现 TTL。 启用 "Always Use HTTPS
时,会话 cookie 是安全的。 此外,cookie 始终启用 "HttpOnly
,以防止跨站脚本攻击。
使用 CLI 设置会话亲缘关系
使用 CLI 创建全局负载均衡器时,请执行以下步骤来设置会话亲缘关系:
- 登录到 IBM Cloud 帐户。
- 创建全局负载均衡器。
- 设置以下CLI变量:
如果你需要在会话亲和 cookie 中使用特定的 SameSite 配置,CIS 建议你为 samesite
和 secure
提供不同于 Auto
的值,而不是依赖默认行为。 这样,SameSite cookie 属性的值就不会因配置更改(即始终使用 HTTPS )而改变。
session_affinity
:有效值为 "cookie
"、"none
"。
ttl
:负载均衡器会话亲和性cookie创建后过期前的时间(秒)。 有效值介于 "1800
"、"604800
"之间。 默认邮箱为 82800
。
session_affinity_attributes
:会话关联性cookie的Cookie属性。
samesite
-
有效值为:
Auto
(默认):如果启用“始终使用 HTTPS”,会话亲和 cookie 将使用 模式;如果禁用,cookie 将使用 模式。Lax
None
None
:所有请求都会发送 Cookie。Lax
:Cookie 只发送到顶点域(如 "example.com
)。Strict
:Cookie 由第一方(被访问域)创建。
secure
-
有效值为:
Auto
(默认):如果启用“始终使用 HTTPS”,会话亲和 cookie 将使用 属性中的 ;如果禁用,cookie 将不使用。samesite
secure
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 -s '{
"name": "lbtest-updated.cindyuitest01.alan501.cns-foo.com",
"fallback_pool": "c7e717109b7cf9240dd10fffc0bd146f",
"default_pools": [
"c7e717109b7cf9240dd10fffc0bd146f"
],
"description": "Load Balancer for www.example.com",
"ttl": 30,
"region_pools": {
"WNAM": [
"c7e717109b7cf9240dd10fffc0bd146f"
],
"ENAM": [
"c7e717109b7cf9240dd10fffc0bd146f"
]
},
"proxied": true,
"enabled": true,
"session_affinity": "ip_cookie",
"session_affinity_attributes": {
"samesite": "None",
"secure": "Always",
"drain_duration": 100
}
}'
使用 API 设置会话亲缘关系
会话亲和性是全局负载平衡器的一项属性,可以通过以下端点进行设置:
使用 "session_affinity
、"session_affinity_ttl
和 "session_affinity_attributes
参数自定义会话亲和的行为。
要通过 HTTP 标头启用会话亲和性,请将 session_affinity
值设置为 header
,并将您的 HTTP 标头名称到 session_affinity_attributes.headers
。
使用 API 创建全局负载均衡器时,请执行以下步骤来设置会话亲缘关系:
-
使用正确的变量设置 API 环境。
-
将以下值存储在要在 API 命令中使用的变量中:
session_affinity
,用于指定负载均衡器使用的会话亲缘关系类型,除非指定为“无”或“缺省值”。 有效值为 none,cookie
和ip_cookie
。session_affinity_ttl
,这是会话亲缘关系的生存时间。session_affinity_attributes
,包括:-
samesite
配置亲缘关系 Cookie 上的 SameSite 属性。 有效值为 "Auto
、"Lax
、"None
、"Strict
“;默认值为”Auto
。 -
secure
配置会话亲缘关系 Cookie 上的安全属性。 有效值为 "Auto
、"Always
、"Never
";默认值为 "Auto
。 -
drain_duration
是放弃持续时间的值 (以秒为单位)。 -
zero_downtime_failover
(可选)在出现瞬时网络问题时自动向池中的端点发送流量。 值为 "temporary
和 "sticky
;默认值为 "none
。通过 HTTP 标头进行会话亲和时,不支持粘性零停机故障切换。
-
-
启动所有变量时,创建具有会话亲缘关系的全局负载均衡器:
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
。