2012-10-05 25 views
3

由于Auto-Scaling不允许缓冲期和/或智能程度不足,因此只允许“新请求”进入由于自动缩放而关闭的实例,因此我试图避免使用ELB提供的粘性会话。否则,这种行为将使一些客户登录屏幕。如何同步AWS EC2中的机器密钥?

该网站和其他RESTful web服务正在IIS7中运行。该网站使用经典的基于表单的身份验证(MVC3中的内置成员资格提供程序),但不久将迁移到自定义成员资格提供程序以查看cookie并解密,然后提供结论。 REST风格的Web服务已经在使用自定义成员资格提供程序。

在这种情况下,我认为我不能通过ELB使用粘性会话的网站。

REST风格的webservices的ELB可以配置为非粘性,因为他们会在每个请求中单独观察cookie,以查看auth令牌是否存在一些加密值。但是,这里的问题是FormsAuthentication.Enrypt和FormsAuthentication.Decrypt方法,它们使用MachineKeys。对 ?!如果没有,那么它没有问题,但如果他们这样做,那么如何在EC2中的自动扩展实例中同步机器密钥?

回答

0

由于推荐的网站似乎遭到黑客攻击(http://aspnetresources.com/tools/machineKey),我会建议使用以下方法来代替:

  1. 打开IIS管理器
  2. 选择您所管理
  3. 在ASP网站.NET部分,选择Machine Key(阅读下面如果你没有看到这个部分)
  4. 取消选中Automatically generate at runtimeGenerate unique keys for each application
  5. 点击Generate Keys在操作菜单,然后单击Apply
  6. 打开web.config<machineKey>标签复制到其他Web服务器的Web场中,使它们都使用相同的machineKey

另外,你赢了”没有任何网站记录你的IP地址和生成的机器密钥(如果我们正在玩世不恭)。


如果你没有在你的IIS管理器中的ASP.NET部分,可以使用下列步骤来启用它(从https://serverfault.com/questions/129714/asp-net-area-in-iis-7-on-windows-2008):

的Windows 7,您可以启用控制面板中的ASP.NET - >程序 - >程序和功能 - >打开或关闭Windows功能。 展开Internet信息服务 - >万维网服务 - >应用程序开发功能,然后单击ASP.NET。在角色服务中单击添加角色 - >选择Web服务器(IIS) - >单击ASP.NET,它将提示输入必要的相关角色服务单击添加所需的角色服务。

5

最佳做法是生成机器密钥并放入web.config文件中。这种方式作为自动缩放开始和停止实例时,键将始终为常量,而不依赖于实际实例。

+0

看起来很有希望。我会试试看,然后标记你的答案。所以基本上你说我可以通过webconfig为webservices配置machinekeys,然后FormsAuthentication.Encrypt和FormsAuthentication.Decrypt将使用这些machinekeys,而不是那些随实例一起提供的。对 ? – dparkar

+0

这是正确的。 –

相关问题