3

由于自动缩放不允许缓冲期和/或不够智能,不能只允许“新请求”进入由于自动缩放而计划关闭的实例,因此我试图避免使用粘性-ELB 提供的会话。否则,这种行为会给一些客户留下登录屏幕。

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

在这种情况下,我认为对于该网站,如果不通过其 ELB 使用粘性会话,我将无法通过。

RESTful Web 服务的 ELB 可以配置为非粘性,因为它们单独观察每个请求上的 cookie,以查看是否存在具有某些加密值的身份验证令牌。但是,这里的问题是 FormsAuthentication.Enrypt 和 FormsAuthentication.Decrypt 方法,它们在后台使用 MachineKeys。对 ?!如果不是,那么它不是问题,但是如果他们这样做了,那么如何在 EC2 中的自动缩放实例之间同步机器密钥?

4

2 回答 2

5

最佳实践是生成一个机器密钥并放入您的 web.config 文件中。这样,当 Auto Scaling 启动和停止实例时,键将始终保持不变,而不依赖于实际实例。

于 2012-10-07T08:01:21.390 回答
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>到您的网络场中的其他网络服务器,以便它们都使用相同的 machineKey

另外,您不会有任何网站记录您的 IP 地址和生成的机器密钥(如果我们是愤世嫉俗的话)。


如果您的 IIS 管理器中没有 ASP.NET 部分,则可以使用以下过程启用它(来自https://serverfault.com/questions/129714/asp-net-area-in-iis-7 -on-windows-2008):

Windows 7中,您可以从控制面板 -> 程序 -> 程序和功能 -> 打开或关闭 Windows 功能来启用 ASP.NET。展开 Internet 信息服务 -> 万维网服务 -> 应用程序开发功能,然后单击 ASP.NET。

Windows Server 2008中,打开服务器管理器 -> 单击角色 -> 单击添加角色 -> 选择 Web 服务器 (IIS) -> 在角色服务中单击 ASP.NET,它将提示输入必要的依赖角色服务,然后单击添加所需的角色服务。

于 2015-11-12T17:21:40.723 回答