2

IIS で Umbraco の負荷分散を設定する方法に関する公式ドキュメントに従って、ファイル レプリケーションを使用するファイル ストレージの推奨オプションを選択しました。

config/umbracoSettings.config で distributedCall 要素をセットアップしました....

<distributedCall enable="true">
    <user>0</user>
    <servers>
        <server>ourserver-node1</server>
        <server>ourserver-node2</server>
    </servers>
</distributedCall>

しかし、コンテンツを公開するたびに失敗し、ログに次のように表示されます...

2013-10-01 17:42:34,054 [12] INFO  Umbraco.Core.Publishing.PublishingStrategy - [Thread 23] Content 'testing page' with Id '1215' has been published.

2013-10-01 17:42:34,101 [12] INFO  Umbraco.Core.Sync.DefaultServerMessenger - [Thread 23] Submitting calls to distributed servers

2013-10-01 17:42:34,179 [12] ERROR Umbraco.Core.Sync.DefaultServerMessenger - [Thread 23] Error refreshing a node in the distributed list, URI attempted: http://ourserver-node1/umbraco/webservices/cacheRefresher.asmx

System.Net.WebException: The request failed with HTTP status 401: Unauthorized.

   at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)

   at System.Web.Services.Protocols.SoapHttpClientProtocol.EndInvoke(IAsyncResult asyncResult)

   at Umbraco.Core.Sync.DefaultServerMessenger.PerformDistributedCall(IEnumerable`1 servers, ICacheRefresher refresher, MessageType dispatchType, IEnumerable`1 ids, Type idArrayType, String jsonPayload)

2 つのノードが構成されており、それぞれのエントリを取得します。両方のサーバーに同じアプリ プール ID を使用しています。

umbraco の Web サイト全体は、Active Directory アカウントを介して記事のコメントを識別するイントラネット アプリとして、Windows 認証を使用するように構成されています。

webservices ディレクトリで Windows 認証を削除し、匿名を許可すると、umbraco バックエンド cms 全体が失敗します (ノード コンテンツ ローダーなど、webservices ディレクトリ内のサービスへのすべての呼び出しが失敗します..)

スタック トレースから、ユーザーを認証できないようです。

マシンキーを確認しましたが、どちらも同じです。

それでも 401 unauthorized が返されるのはなぜですか?

ブラウザ経由で cacheRefresher.asmx をヒットできますが、同じ 401 でフィドラー経由で失敗します。そのため、ブラウザ経由で Wi​​ndows の資格情報を使用して収集します。

4

1 に答える 1

2

したがって、この問題は、サイトのルートに Windows 認証を適用したために、クラスター内の他のノードへの呼び出しが失敗したことが原因であることが判明しました。

コンテンツ キャッシュを更新するためにクラスター内の他のノードにシグナルを送信するメイン ノードからの呼び出しは、カスタムの認証方法 (ユーザー名とパスワードをパラメーターとしてサービスに渡す) を使用するように設計されているため、失敗していました。

以下をルート web.config に追加すると、呼び出しが通常どおり通過できるようになります...

 <location path="umbraco/webServices">
<system.web>
  <authorization>
    <allow users="*"/>
  </authorization>
</system.web>

これは、ディレクトリが事実上セキュリティで保護されていないことを意味しますが、これは設計によるものであることに注意してください。このサブディレクトリ内の各サービスは、呼び出しごとにユーザー名とパスワードが送信されることを想定しているため、安全であると見なすことができます。慎重に使用するか、umbraco ソースを適切に変更してください。

于 2013-11-12T15:08:38.873 に答える