应用型负载均衡ALB 【登录时验证码一直错误】阿里云 如何session共享 配置Cookie
默认情况下,ALB会将每个客户端请求分别分发到不同的后端服务器上。当您开启了会话保持功能后,会话保持可以使来自同一客户端的请求被转发到同一台后端服务器上。本文为您介绍会话保持的相关配置。
优惠抢购地址:https://www.aliyun.com/activity/new?userCode=edcp6fhu
当您未开启会话保持时,同一客户端的请求通过ALB可能会被分配到不同的后端服务器,客户端的请求需要重新登录后端服务器。当您开启了会话保持后,会话保持会将同一客户端的会话请求转发给同一台后端服务器处理,这样会避免ALB将同一客户端请求分配到不同的服务器上,客户端的请求无需重复登录后端服务器。 植入Cookie:客户端第一次访问时,ALB会在返回请求中植入Cookie(即在HTTP/HTTPS响应报文中插入SERVERID),下次客户端携带此Cookie访问,负载均衡服务会将请求定向转发给之前记录到的后端服务器上。 重写Cookie:当ALB发现用户自定义了Cookie,将会对原来的Cookie进行重写,下次客户端携带新的Cookie访问,ALB会将请求定向转发给之前记录的后端服务器。 服务器组类型为函数计算类型时,您无需配置会话保持。更多操作,请参见创建服务器组。 在顶部菜单栏处,选择后端服务器组所属的地域。 在左侧导航栏,选择 。 在服务器组页面,找到目标服务器组,在操作列单击编辑基本信息。 在编辑基本信息对话框中,开启或关闭会话保持。 选择植入Cookie,输入会话保持超时时间,然后单击保存。 会话保持超时时间取值范围为1~86400秒。 选择重写Cookie,输入Cookie名称,然后单击保存。 开启会话保持:打开是否开启会话保持开关并选择Cookie处理方式。 关闭会话保持:关闭是否开启会话保持开关,然后单击保存。 本文将Cookie名称设置为 不同的Web服务器对应的Cookie设置方法不同,以下列举常见Web服务器的设置方法,请您根据实际情况选择,如果您使用的Web服务器不在以下列表中,请您查阅对应的官方文档获取配置方法。 远程登录ECS。具体操作,请参见ECS远程连接操作指南。 根据不同的Web服务器配置Cookie。 Apache Nginx Lighttpd 编辑Lighttpd的lighttpd.conf配置文件,参考以下内容进行配置。 重启Lighttpd服务,使以上改动生效。 编辑Nginx的nginx.conf配置文件,参考以下内容进行配置。 执行以下命令重新加载Nginx的配置文件。 查看Apache的 参考以下内容,在 执行以下命令,重新加载Apache的配置文件,使以上改动生效。 参考以上步骤,修改服务器组中其余后端服务器的配置,使其含有Cookie配置。 修改服务器组配置,将Cookie处理方式设置为重写Cookie。 在顶部菜单栏处,选择后端服务器组所属的地域。 在左侧导航栏,选择 。 在服务器组页面,找到目标服务器组,在操作列单击编辑基本信息。 在编辑基本信息对话框中,选择Cookie处理方式为重写Cookie,并设置Cookie名称为 在后端服务器配置Cookie后,您需要测试ALB会话保持的有效性。 您已经创建了一个处于运行中状态的公网ALB实例,且为该实例创建了服务器组并配置了监听。具体操作,请参见ALB快速入门。 您已经创建了后端服务器ECS01和ECS02,用于接收请求,且在ECS01和ECS02中分别创建了测试页面check.php,该页面将返回ECS实例的Cookie和内网IP地址信息,check.php的代码示例如下: 您已经在客户端创建了ECS03,用于发送请求。 远程登录客户端的ECS03,具体操作,请参见ECS远程连接操作指南。 执行以下命令,保存ALB实例的Cookie值。 新建测试脚本check_7.sh,内容如下。 执行以下命令,进行会话保持测试。 收到如下所示的回复报文,表示返回的后端服务器内网IP均是同一个,则会话保持有效。 收到如下所示的回复报文,表示返回的后端服务器内网IP不固定,则会话保持失效。 CreateServerGroup:创建服务器组。 UpdateServerGroupAttribute:更新服务器组的配置,例如健康检查、会话保持、名称、调度算法和协议等。 AddServersToServerGroup:向服务器组中添加后端服务器。背景信息
使用限制
前提条件
配置会话保持
后端服务器配置Cookie的方法
BACKEND_SERVER
,该名称仅为示例,您可以自定义该名称。server.modules = ( "mod_setenv" )$HTTP["host"] == "www.example.com" {
server.document-root = "/var/www/html/"
setenv.add-response-header = ( "Set-Cookie" => "BACKEND_SERVER=<自定义字符串>" )
}
server {
listen 80;
server_name www.example.com;
location / {
add_header Set-Cookie BACKEND_SERVER=<自定义字符串>; #Cookie的名称,此处以BACKEND_SERVER为例。
root html;
index index.html index.htm;
}
}
nginx -s reload
httpd.conf
配置文件,确认以下配置没有被注释,即Apache正常加载了usertrack_module
模块。LoadModule usertrack_module modules/mod_usertrack.so
VirtualHost
标签中添加配置。CookieName BACKEND_SERVER #Cookie的名称,此处以BACKEND_SERVER为例。CookieExpires "1 days" #Cookie的过期时间,此处以1天为例。CookieStyle Cookie
CookieTracking on
service httpd reload
BACKEND_SERVER
。测试会话保持的有效性
本文中的ALB实例和ECS01、ECS02的网络规划为:<?php
setcookie('mycookie','cookietest'); echo 'Cookie is: '; echo ($_COOKIE['mycookie']); echo '</br>'; echo 'Current ECS is : '; echo '</br>'; var_dump($_SERVER['SERVER_ADDR']);?>
实例 IP规划 ALB 1.1.XX.XX ECS01 192.168.32.175 ECS02 192.168.32.177 curl -D test.cookie http://1.1.XX.XX/check.php
for ((a=1;a<=30;a++))do
curl -b test.cookie http://1.1.XX.XX/check.php 2>/dev/null | grep 'ECS'
sleep 1done
a<=30
更改测试次数。sh check_7.sh
相关文档