当前位置:首页 > 技术分享 > 正文内容

应用型负载均衡ALB 【登录时验证码一直错误】阿里云 如何session共享 配置Cookie

admin2年前 (2022-09-01)技术分享1303

默认情况下,ALB会将每个客户端请求分别分发到不同的后端服务器上。当您开启了会话保持功能后,会话保持可以使来自同一客户端的请求被转发到同一台后端服务器上。本文为您介绍会话保持的相关配置。

优惠抢购地址:https://www.aliyun.com/activity/new?userCode=edcp6fhu

背景信息

当您未开启会话保持时,同一客户端的请求通过ALB可能会被分配到不同的后端服务器,客户端的请求需要重新登录后端服务器。当您开启了会话保持后,会话保持会将同一客户端的会话请求转发给同一台后端服务器处理,这样会避免ALB将同一客户端请求分配到不同的服务器上,客户端的请求无需重复登录后端服务器。

ALB开启会话保持后,需要选择Cookie的处理方式,有植入Cookie和重写Cookie两种处理方式。
  • 植入Cookie:客户端第一次访问时,ALB会在返回请求中植入Cookie(即在HTTP/HTTPS响应报文中插入SERVERID),下次客户端携带此Cookie访问,负载均衡服务会将请求定向转发给之前记录到的后端服务器上。

  • 重写Cookie:当ALB发现用户自定义了Cookie,将会对原来的Cookie进行重写,下次客户端携带新的Cookie访问,ALB会将请求定向转发给之前记录的后端服务器。

使用限制

服务器组类型为函数计算类型时,您无需配置会话保持。更多操作,请参见创建服务器组

前提条件

配置会话保持

  1. 登录应用型负载均衡ALB控制台

  2. 在顶部菜单栏处,选择后端服务器组所属的地域。

  3. 在左侧导航栏,选择应用型负载均衡ALB > 服务器组

  4. 服务器组页面,找到目标服务器组,在操作列单击编辑基本信息

  5. 编辑基本信息对话框中,开启或关闭会话保持。

    • 选择植入Cookie,输入会话保持超时时间,然后单击保存

      会话保持超时时间取值范围为1~86400秒。

    • 选择重写Cookie,输入Cookie名称,然后单击保存

    • 开启会话保持:打开是否开启会话保持开关并选择Cookie处理方式

    • 关闭会话保持:关闭是否开启会话保持开关,然后单击保存

后端服务器配置Cookie的方法

当服务器组开启会话保持且选择的Cookie处理方式为重写Cookie时,需要在后端服务器中配置对应的Cookie。
说明
  • 本文将Cookie名称设置为BACKEND_SERVER,该名称仅为示例,您可以自定义该名称。

  • 不同的Web服务器对应的Cookie设置方法不同,以下列举常见Web服务器的设置方法,请您根据实际情况选择,如果您使用的Web服务器不在以下列表中,请您查阅对应的官方文档获取配置方法。

  1. 远程登录ECS。具体操作,请参见ECS远程连接操作指南

  2. 根据不同的Web服务器配置Cookie。

    • Apache

    • Nginx

    • Lighttpd

    1. 编辑Lighttpd的lighttpd.conf配置文件,参考以下内容进行配置。

      server.modules  = ( "mod_setenv" )$HTTP["host"] == "www.example.com" {      
      server.document-root = "/var/www/html/"      
      setenv.add-response-header = ( "Set-Cookie" => "BACKEND_SERVER=<自定义字符串>" )
      }
    2. 重启Lighttpd服务,使以上改动生效。

    3. 编辑Nginx的nginx.conf配置文件,参考以下内容进行配置。

      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;
          }
      }
    4. 执行以下命令重新加载Nginx的配置文件。

      nginx -s reload
    5. 查看Apache的httpd.conf配置文件,确认以下配置没有被注释,即Apache正常加载了usertrack_module模块。

      说明 如果以下配置被注释,您需要移除注释并重启Apache服务。
      LoadModule usertrack_module modules/mod_usertrack.so
    6. 参考以下内容,在VirtualHost标签中添加配置。

      CookieName BACKEND_SERVER    #Cookie的名称,此处以BACKEND_SERVER为例。CookieExpires "1 days"       #Cookie的过期时间,此处以1天为例。CookieStyle Cookie
      CookieTracking on
    7. 执行以下命令,重新加载Apache的配置文件,使以上改动生效。

      service httpd reload
  3. 参考以上步骤,修改服务器组中其余后端服务器的配置,使其含有Cookie配置。

  4. 修改服务器组配置,将Cookie处理方式设置为重写Cookie。

    1. 登录应用型负载均衡ALB控制台

    2. 在顶部菜单栏处,选择后端服务器组所属的地域。

    3. 在左侧导航栏,选择应用型负载均衡ALB > 服务器组

    4. 服务器组页面,找到目标服务器组,在操作列单击编辑基本信息

    5. 编辑基本信息对话框中,选择Cookie处理方式重写Cookie,并设置Cookie名称BACKEND_SERVER

测试会话保持的有效性

在后端服务器配置Cookie后,您需要测试ALB会话保持的有效性。

在测试会话保持有效性之前,您需要满足以下条件:
  • 您已经创建了一个处于运行中状态的公网ALB实例,且为该实例创建了服务器组并配置了监听。具体操作,请参见ALB快速入门

  • 您已经创建了后端服务器ECS01和ECS02,用于接收请求,且在ECS01和ECS02中分别创建了测试页面check.php,该页面将返回ECS实例的Cookie和内网IP地址信息,check.php的代码示例如下:

    <?php
        setcookie('mycookie','cookietest');    echo 'Cookie is: ';    echo ($_COOKIE['mycookie']);    echo '</br>';    echo 'Current ECS is : ';    echo '</br>';    var_dump($_SERVER['SERVER_ADDR']);?>
  • 您已经在客户端创建了ECS03,用于发送请求。

本文中的ALB实例和ECS01、ECS02的网络规划为:

实例IP规划
ALB1.1.XX.XX
ECS01192.168.32.175
ECS02192.168.32.177
说明 本文中客户端的ECS01,服务端的ECS02和ECS03均安装了Linux操作系统,如果您使用的是其他操作系统,如何测试会话保持的有效性请参见您的操作系统手册。
  1. 远程登录客户端的ECS03,具体操作,请参见ECS远程连接操作指南

  2. 执行以下命令,保存ALB实例的Cookie值。

    说明 ALB的会话保持默认模式是植入Cookie,而curl命令默认不保存和发送Cookie。需要预先保存相应的Cookie,再进行测试。否则,curl测试结果将是随机的,影响测试结果的准确性。
    curl -D test.cookie http://1.1.XX.XX/check.php
  3. 新建测试脚本check_7.sh,内容如下。

    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
    说明 该脚本默认测试30次,您可以修改a<=30更改测试次数。
  4. 执行以下命令,进行会话保持测试。

    sh check_7.sh
    • 收到如下所示的回复报文,表示返回的后端服务器内网IP均是同一个,则会话保持有效。01

    • 收到如下所示的回复报文,表示返回的后端服务器内网IP不固定,则会话保持失效。02

相关文档


扫描二维码推送至手机访问。

版权声明:本文由小刚刚技术博客发布,如需转载请注明出处。

本文链接:http://blog.bitefu.net/post/410.html

分享给朋友:

相关文章

微软Windows 10升级密钥(例如家庭版升级为企业版) 不能用于激活系统

微软Windows 10升级密钥(例如家庭版升级为企业版) 不能用于激活系统

下面的密钥,是微软官方提供的,仅能用于Windows10系统版本的升级,比如从家庭版升级为专业版、专业版升级为企业版等。升级密钥不能用于激活系统,激活需要KMS或者数字权利,由于涉及到版权问题,在此不宜分享,请大家自行查找激活相关的内容。准...

PIP 更换国内安装源linux/windows

pip国内的一些镜像  阿里云 http://mirrors.aliyun.com/pypi/simple/   中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/   豆瓣(...

遭遇国外ip抓取或攻击怎么办一招解决禁止海外IP访问

遭遇国外ip抓取或攻击怎么办一招解决禁止海外IP访问

究发现很多网站被攻击都是来自海外的肉鸡,所以禁掉海外IP访问网站也是不错的防护手段,而且国内网站几乎很少有国外用户访问,称之为大局域网也不为过。今天主机吧来教大家如何利用域名解析禁止掉海外IP访问网站。绝大多数域名解析服务商都是提供电信联通...

Nginx服务崩溃自动重启脚本(监控进程服务并自动重启进程服务)脚本

有一台服务器运行着Ngin最近突然有一次崩溃,导致使用方当天无法访问网页端,然后我不得不登录服务器,检查各项服务,发现nginx崩溃了,于是重启Nginx,问题解决。后来为了防止Nginx再发生这种情况给运维带来的运维成本,于是写了一个脚本...

用CMD命令查询域名的DNS解析记录:A,NS,MX,CNAME,TXT

1、查询域名的A记录nslookup -qt=A bitefu.net当然查询A记录你直接用ping命令来ping域名也可以获得A记录。2、查询域名的NS记录nslookup -qt=NS bitefu.net3、查询域名的MX记录nslo...

抢先体验太阳谷!20H1、20H2、21H1替换“Dev版新图标”

尽量不要替换shell32.dll.mun和zipfldr.dll.mun,这两老哥可能会带来无法预测的风险!不解除被替换文件的硬链接,已确定会导致无法安装质量更新!(详见H大测评)单替换imageres.dll.mun新图标覆盖率基本可达...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。