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 个节点,每个节点都有一个条目。我们为两台服务器使用相同的应用程序池标识。

整个 umbraco 网站都配置为使用 Windows 身份验证,因为它是一个通过其活动目录帐户识别文章评论的 Intranet 应用程序。

如果我在 webservices 目录上删除 windows 身份验证并允许匿名,则会导致整个 umbraco 后端 cms 失败(对 webservices 目录中服务的所有调用都失败,例如节点内容加载器等。)

从堆栈跟踪看来,用户无法通过身份验证。

我检查了机器钥匙,两者都是一样的。

为什么我仍然会在未经授权的情况下收到 401?

我可以通过我的浏览器访问 cacheRefresher.asmx,但它通过 fiddler 失败并带有相同的 401。所以我在通过浏览器时使用我的 Windows 凭据来收集它。

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 回答