2

情况:

我们有 2 个运行负载平衡(软件,标准安装)框架 4.5 的 Web 服务器 IIS7.5

我们在两台服务器上都运行了 Kentico 7.0 安装。

问题:

站点加载正常,但是当我更改为 CMSDesk 并尝试登录(使用 IE8)时,我收到错误消息(非常快,甚至一秒钟):

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster. 

事件簿

Event code: 4009 
Event message: Viewstate verification failed. Reason: The viewstate supplied failed integrity check. 

使用 Chrome 27+ 大约需要 3-4 秒,但 CMSDesk 会出现(只是有时会出现错误,我不能说什么时候?!)。这就是为什么我可以排除 IE8 问题

现在它变得非常诡异,即使我从负载平衡器中取出服务器!

我尝试过的:( 所有这些实验我都尝试过各种组合)

0) 疯狂搜索,回收应用程序池并清除缓存。基本

1) 在

machine.config's (rebooted the servers afterwards)
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\config\machine.config
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\config\machine.config
%SystemRoot%\Microsoft.NET\Framework64\v2.0.50727\config\machine.config
%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\config\machine.config

Example Code (in all Files the SAME KEYS)
<system.web>
  <machineKey validationKey="EEF33150A048D162D22CB36E1CB9956B148C7A4E6999D0F05B53D416D7A16F83823DD626F501DD3549D3E5DCB473634739D0AD9A07F71560946498C943A7586D"
    decryptionKey="0E95F75864047EB6322EA7D5246F2C1175D77A1B016F293C3BAAD000299A3DC8"
    validation="SHA1"
    decryption="AES" />
</system.web>

结果:同样的错误

2)我什至在webconfig中设置它(只是为了确定)。

结果:同样的错误

3)我将 Web.config 中 pages-element 上的属性 enableViewStateMac 设置为 false (只是为了看看它是否有效,我不喜欢安全漏洞)

结果:没有错误,但我留在了登录页面。在 kentico-event-log 上有一条成功的身份验证消息。唔?!所以,为了安全起见,我把它变回了真实;-) 其他安全漏洞解决方案,如 auth never 等等,我什至没有尝试过,因为它应该是一个保存页面。

4)我检查了页面是否真的完全加载(因为在某些论坛中指出,如果页面没有完全加载,它可能会破坏视图状态并且验证不起作用)

结果:同样的错误

5)我尝试了“不安全”的 Kentico 解决方法,在 web.config / settings 部分设置属性

    <add key="CMSUseViewStateUserKey" value="false"/>

结果:与数字 3 相同

6)我什至查看了“IE8 中的前瞻下载器错误”,但这应该用 KB980182 修复并且我已经安装(是的,我现在正在寻找稻草)

刚刚看过

7) ViewState 似乎不太长,因为它只是一个登录表单

刚刚看过

8) 不使用集群IP-Adress直接调用一台Server

结果:有效。(耶)

-> 所有这些信息让我有些困惑,我如何让集群工作?

*) Chrome 与集群 / 与集群中的服务器 / 直接在服务器上运行 90 - 99%

*) IE 8 不适用于集群

*) IE 8 不适用于只有一台服务器的集群

*) IE 8 直接在服务器上运行

到目前为止的结论:

*) 它可能是一个 IE8 错误

*) 它可能与负载平衡、集群或域名有关(我认为)。

*)由于目前我无法再复制,我必须丢弃 Chrome/错误

*)由于第 3 点,它必须具有 MAC 功能(http://support.microsoft.com/

我会感谢任何输入/指针/...

Ps:请不要对我苛刻这是我的第一个问题。

4

2 回答 2

3

我想我找到了解决方案(我可以在星期一真正测试它,当时服务器团队的同事回来了)。

无奈之下,我分析了 IE 和 Chrome 的 http-traffic,发现 set-cookie 请求从未设置。在篡改 http 流量并自己注入 cookie 之后。页面加载正常。-> 原因实际上是 Internet Explorer。

所以在谷歌搜索之后,我发现,指向负载均衡器的 fqdn似乎有一个无效的字符(下划线),并且 IE8 会在 fqdn 无效的情况下丢弃 cookie。(我在这里找到了这个信息,它说明了 IE 9 的相同问题,但症状匹配)

有趣的是 Firefox,Chrome,......似乎接受“无效”fqdn

所以问题解决了。在周一与服务器人员进行测试后,我将发布/评论结果。(只是,分享解决方案和结果的所有部分)

更新:与伙计们核实,这是问题/解决方案

于 2013-06-08T14:44:52.733 回答
1

是否将 Kentico 实例设置为Web 场同步,以便它们彼此了解并且包括缓存和视图状态在内的所有内容都同步?

于 2013-06-07T13:25:44.463 回答