由于Auto-Scaling不允许缓冲时间和/或不够智能,不允许只有“新请求”进入由于自动缩减而被安排关闭的实例,我试图避免使用ELB提供的粘性会话。否则,此行为将使一些客户具有登录屏幕。
网站和其他RESTful网络服务正在IIS7中运行。该网站使用基于经典表单的身份验证(MVC3中的内置成员资格提供程序),但很快将迁移到自定义成员资格提供程序以查看cookie并解密然后给出判决。 RESTful Web服务已经在使用自定义成员资格提供程序。
在这种情况下,我认为对于我不能通过其ELB使用粘性会话而无法获得的网站。
RESTful Web服务的ELB可以配置为非粘性,因为它们在每个请求上单独观察cookie,以查看auth令牌是否存在某些加密值。但是,这里的问题是方法FormsAuthentication.Enrypt和FormsAuthentication.Decrypt,它们使用MachineKeys。对 ?!如果没有,那么它没有问题,但如果他们这样做,那么如何在EC2中的自动标量实例之间同步机器密钥?
答案 0 :(得分:5)
最佳做法是生成计算机密钥并放入web.config文件。这样,当自动缩放开始和停止实例时,密钥将始终保持不变,而不依赖于实际实例。
答案 1 :(得分:0)
由于推荐的网站似乎已被黑客攻击(http://aspnetresources.com/tools/machineKey),我建议您改用以下程序:
Machine Key
(如果您没有看到此部分,请阅读以下内容)Automatically generate at runtime
和Generate unique keys for each application
Generate Keys
,然后点击Apply
web.config
并将<machineKey>
标记复制到网络服务器场中的其他网络服务器,以便它们都使用相同的计算机密钥另外,您没有任何网站记录您的IP地址和生成的机器密钥(如果我们是愤世嫉俗的话)。
如果您在IIS管理器中没有ASP.NET部分,则可以使用以下过程启用它(来自https://serverfault.com/questions/129714/asp-net-area-in-iis-7-on-windows-2008):
在 Windows 7 中,您可以从控制面板启用ASP.NET - &gt;程序 - &gt;程序和功能 - &gt;打开或关闭Windows功能。 展开Internet信息服务 - &gt;万维网服务 - &gt;应用程序开发功能,然后单击ASP.NET。
在 Windows Server 2008 中,打开服务器管理器 - &gt;点击角色 - &gt;点击添加角色 - &gt;选择Web服务器(IIS) - &gt;在角色服务中单击ASP.NET,它将提示必要的相关角色服务,单击“添加必需的角色服务”。