我一直在努力 .
我在ELB后面的两个EC2实例上实现了一个非常简单的HTTP服务器 . HTTP服务器仅从标头中读取cookie,并在响应头中发回与响应相同的cookie .
在客户端,我使用
curl --cookie "mychannelid=mytest; Expires=Sat, 27-Jun-2017 02:48:17 GMT" --header "Accept-Language: en" "http://myelb.elb.amazonaws.com:8000/test"
另外,在elb上,我使用cookie名称mychannelid启用了应用程序粘性 . 但是当我运行这个系统时,我仍然有50/50的服务器分配 . 我该如何实现呢?
另一个信息是,如果在HTTP服务器上生成cookie,并发送回客户端,我也需要使用firefox访问HTTP服务器,然后我可以得到我想要的 . 如果我用curl访问HTTP服务器,我不能 . 我不知道为什么,我检查了数据包,cookie在 Headers 中 .
1 回答
当使用 Application-Controlled Session Affinity时,ELB在技术上不会根据您的应用程序cookie决定粘性,而是会分配它自己的
AWSELB
cookie,类似于基于持续时间的cookie,但是与您的应用程序cookie相同的到期日期 . 因此,只要浏览器(或任何其他客户端)返回ELB,它就应该发送两个Cookie,而不仅仅是应用程序 .首先,我们需要一个常规
curl
,而不是像使用--cookie "mychannelid=mytest"
那样发送cookie,而是将收到的cookie保存到名为cookies.txt
的文件中:(注意服务器上的
cookie.php
需要设置应用程序cookie,对我来说,我称之为STICKINESSID
并将值设置为tomtest31mar1030
)卷曲输出显示返回的cookie:
即,文件
cookies.txt
创建时包含STICKINESSID
和AWSELB
Cookies :现在,让两个cookie都需要保持粘性,让我们测试在请求中发送它们:
(这假定http://example.com/cookie.php输出一些调试信息,您可以在其中看到ELB背后的实例的IP,因此您可以测试粘性)
这表明,在多个请求中保留了粘性 . 尝试相同的测试,不用
-b cookies.txt
测试没有粘性 .