Configurando a afinidade de sessão
O carregamento de um site geralmente requer a busca de vários ativos de um servidor da web. A afinidade de sessão CIS minimiza solicitações de rede redundantes ao direcionar automaticamente solicitações do mesmo cliente para o mesmo servidor da web de origem.
O CIS configura um cookie na resposta inicial para o cliente. O uso do cookie em solicitações de clientes subsequentes assegura que essas solicitações sejam enviadas para a mesma origem, a menos que a origem esteja indisponível.
Quando ativada, a afinidade de sessão do CIS faz o seguinte:
- Quando um cliente faz sua primeira solicitação, o CIS configura um cookie
CFLibno cliente. O cookie codifica a origem para a qual a solicitação é encaminhada. - As solicitações subsequentes do cliente são encaminhadas para essa origem pela duração do cookie e desde que o servidor de origem permaneça operacional.
- Se o cookie expirar ou o servidor de origem ficar fora de operação, o CIS configurará uma nova codificação decookie na origem de failover apropriada.
Todas as sessões são padronizadas como 23 horas, a menos que um TTL de sessão customizada seja especificado (em segundos) entre 30 minutos e 7 dias. Um cookie de afinidade de sessão é necessário para honrar o TTL. O cookie de sessão é seguro quando
" Always Use HTTPS está ativado. Além disso, HttpOnly está sempre ativado para o cookie para evitar ataques de cross-site scripting.
Definindo a afinidade da sessão a partir da CLI
Ao criar um balanceador de carga global a partir da CLI, execute as seguintes etapas para definir a afinidade da sessão:
- Efetue login em sua conta do IBM Cloud.
- Criar um balanceador de carga global.
- Defina as seguintes variáveis da CLI:
Se você precisar de uma configuração específica SameSite nos cookies de afinidade de sessão, o CIS recomenda que você forneça valores para samesite e secure diferentes de Auto, em vez de confiar no comportamento
padrão. Desta forma, o valor do atributo do cookie SameSite não muda devido a alterações na configuração (ou seja, Sempre usar HTTPS ).
session_affinity: os valores válidos são cookie, none.
ttl: Tempo, em segundos, até que o cookie de afinidade de sessão deste balanceador de carga expire após ter sido criado. Valores válidos entre ' 1800, ' 604800. O padrão é 82800.
session_affinity_attributes: Atributos de um cookie de afinidade de sessão.
samesite-
Os valores válidos são: *
Auto(padrão): Se Always Use HTTPS estiver ativado, os cookies de afinidade de sessão usarão o modoLax; se estiver desativado, os cookies usarão o modoNone. *None: Os cookies são enviados com todas as solicitações. *Lax: Os cookies são enviados somente para o domínio apex (como 'example.com). *Strict: Os cookies são criados pela primeira parte (o domínio visitado). secure-
Os valores válidos são: *
Auto(padrão): Se Always Use HTTPS estiver ativado, os cookies de afinidade de sessão usarãosecureno atributosamesite; se estiver desativado, os cookies não usarãosecure. *Alwayssecureestá sempre definido, o que significa que o cookie só é enviado em conexões HTTPS. *Neversecurenunca é definido, permitindo que os cookies sejam enviados por conexões HTTPS e HTTP. drain_duration-
Opcional. Tempo, em segundos, em que a origem drenará as sessões ativas. Após o término do tempo, todas as sessões existentes são encerradas. Esse campo é usado somente quando a afinidade de sessão está ativada no balanceador de carga.
zero_downtime_failover-
Opcional. Envia automaticamente o tráfego para endpoints em um pool durante problemas transitórios de rede. Os valores de valor são: *
none(padrão): Não ocorre failover e os erros podem ser exibidos aos usuários. *temporary: O tráfego é enviado para outros pontos de extremidade até que o ponto de extremidade originalmente fixado esteja disponível. *sticky: O cookie de afinidade da sessão é atualizado e as solicitações subsequentes são enviadas para o novo endpoint, avançando conforme necessário.O failover persistente sem tempo de inatividade não é compatível com a afinidade de sessão por um cabeçalho HTTP.
Por exemplo:
ibmcloud cis glb-update fc72db47cee8290eaef292cda6e1619a 12b68758126546e0d129c7bbadfa87f0 --json '{"session_affinity":"cookie","session_affinity_ttl":1800,"session_affinity_attributes":{"samesite":"Auto","secure":"Auto"}}'
Definindo a afinidade da sessão com a API
A afinidade de sessão é uma propriedade dos balanceadores de carga globais, que você pode definir com os seguintes pontos de extremidade:
Personalize o comportamento da afinidade de sessão usando os parâmetros " session_affinity, " session_affinity_ttl e " session_affinity_attributes.
Para ativar a afinidade de sessão por cabeçalho HTTP, defina o valor session_affinity como header e adicione seus Nomes de cabeçalho HTTP a session_affinity_attributes.headers.
Ao criar um balanceador de carga global usando a API, execute as etapas a seguir para configurar a afinidade de sessão:
-
Configure seu ambiente de API com as variáveis corretas.
-
Armazene os valores a seguir nas variáveis a serem usadas no comando da API:
session_affinity, que especifica o tipo de afinidade de sessão que o balanceador de carga usa, a menos que especificado como "none" ou "default". Valores válidos são none,cookie,ip_cookie.session_affinity_ttl, que é o tempo de vida da afinidade de sessãosession_affinity_attributesque incluem:-
samesiteconfigura o atributo SameSite no cookie de afinidade.. Os valores válidos são 'Auto, 'Lax, 'None, 'Strict; o padrão é 'Auto. -
secureconfigura o atributo Secure no cookie de afinidade de sessão. Os valores válidos são 'Auto, 'Always, 'Never; o padrão é 'Auto. -
drain_durationé o valor da duração do dreno em segundos. -
zero_downtime_failover(opcional) envia automaticamente o tráfego para os pontos de extremidade em um pool durante problemas de rede transitórios. Os valores de valor são 'temporarye 'sticky; o padrão é 'none.O failover persistente sem tempo de inatividade não é compatível com a afinidade de sessão por um cabeçalho HTTP.
-
-
Quando todas as variáveis forem iniciadas, crie o balanceador de carga global com afinidade de sessão:
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"
]
}
}'
Se você definir samesite como None em sua solicitação de API, não poderá definir secure como Never.