2

状況:

負荷分散された (ソフトウェア、標準インストール) フレームワーク 4.5 を実行する 2 つの Web サーバー IIS7.5 がインストールされています。

両方のサーバーで実行されている Kentico 7.0 インストールがあります。

問題:

サイトの読み込みは正常ですが、CMSDesk に変更して (IE8 で) ログインしようとすると、エラー メッセージが表示されます (非常に速くなく、1 秒もかかりません):

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) machinekey 要素を

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 には、成功した認証メッセージがありました。うーん?!だから、私はそれをtrueに戻し、安全にしました;-) auth neverなどの他のセキュリティホールソリューションは、保存ページである必要があるため、試しませんでした.

4) ページが本当に完全に読み込まれたかどうかを確認しました (一部のフォーラムでは、ページが完全に読み込まれていない場合、viewstate が壊れて検証が機能しないと述べられていたため)

結果: 同じエラー

5) 「安全でない」Kentico の回避策を試し、web.config / settings セクションで属性を設定しました

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

結果:3番と同じ

6) 「IE8 の先読みダウンローダーのバグ」も調べましたが、これは KB980182 で修正する必要があり、インストールしました (はい、今ストローをつかんでいます)

ちょうど見た

7) ViewState はログイン フォームに過ぎないため、あまり長くないように見えます。

ちょうど見た

8) クラスタ IP アドレスなしで 1 つのサーバーを直接呼び出す

結果: 動作します。(はい)

-> この情報はすべてややこしいですが、クラスターを機能させるにはどうすればよいですか?

*) Chrome は、クラスタ / クラスタ内のサーバー / サーバー上で 90 ~ 99% 直接動作します

*) IE 8 はクラスターでは動作しません

*) IE 8 は、サーバーが 1 つしかないクラスターでは機能しません。

*) IE 8 はサーバー上で直接動作します

これまでの結論:

*) IE8 のバグである可能性があります

*) ロードバランシング、クラスター、またはドメイン名 (と思います) に関するものである可能性があります。

*) 現在、これ以上再現できないため、Chrome/エラーを破棄する必要があります

*) ポイント 3 により、MAC 機能を備えたものでなければなりません ( http://support.microsoft.com/ )

入力/ポインター/...に感謝します

Ps: 難しく考えないでください。これが最初の質問です。

4

2 に答える 2

3

解決策を見つけたと思います(サーバーチームの同僚が戻ってきた月曜日に実際にテストできます)。ええ

絶望的な行為で、IE と Chrome の両方の http-traffic を分析し、set-cookie リクエストが設定されていないことを発見しました。http-traffic を改ざんし、自分で Cookie を挿入した後。ページは正常に読み込まれました。→原因はやはり Internet Explorer でした。

そのため、さらにグーグルで検索した後、ロードバランサーを指すfqdnに無効な文字(アンダースコア)があり、無効なfqdnの場合、IE8はCookieを破棄するように見えました。(この情報はこちらで見つかりました。IE 9 についても同じ問題が示されていますが、症状は一致しています)

Firefox、Chrome、...「無効な」fqdnを受け入れるように見えるのはおかしい

それで問題は解決しました。月曜日に Server-Crew でテストを行った後、結果を投稿/コメントします。(ただ、解決策と結果のすべての部分を共有してください)

更新:みんなに確認したところ、これが問題/解決策でした

于 2013-06-08T14:44:52.733 に答える
1

Kentico インスタンスはWeb ファームの同期に設定されているので、お互いを認識し、キャッシュやビューステートを含むすべてのものが同期されますか?

于 2013-06-07T13:25:44.463 に答える