IIS 无法将日志写入引用网络共享的符号链接

IIS can't write logs to a symlink that references a network share

早上好! 我有一个服务器 运行 iis,还有一个文件夹位于不同网络(和域)中的另一台机器上。 我已经成功地建立了到网络目录的符号链接,但我不明白为什么 IIS 不能写这个目录。

我已授予所有人对此文件夹的读取、写入和执行权限。 当我用文件资源管理器打开这个目录时,一切正常,但是当我试图在它们上面写时,iis 给我错误 500。 根据日志结果,我的 ASP 应用程序无法写入此目录。 对不起,如果这是一个愚蠢的问题,但我已经尝试了两天,现在我已经结束了我的想法。 =(

这是旧的,我不知道是否有这样做的标准方法,但我了解到必须以其他方式完成。

我是 运行 windows NLB 下的两台 IIS 8.5 Web 服务器,并记录到 DFS 共享上的单独文件夹。服务器共享配置,DFS 复制保持服务器内容的一致性。

每个网站都有一个 logs symlink 文件夹指向其在 DFS 共享上的子文件夹。

服务器 1:c:\inetpub\mywebsite\logs -> \ad.mydomain.com\Logs\Server1\mywebsite
服务器 2:c:\inetpub\mywebsite\logs -> \ad.mydomain.com\Logs\Server2\mywebsite

这与将站点日志目录设置为
的功能等效 \ad.mydomain.com\Logs\%COMPUTERNAME%\mywebsite.

这对我有用了一段时间,但后来就停止了。自然而然,结果是不是一个,而是两个问题

第一个是关于权限

Server1Server2 域的一部分 WebServers group,它完全控制 DFS 共享子文件夹 Server1Server2AdministratorsSYSTEM 也是如此,所有这些都继承自分享。通过网站代码写入 logs 文件夹,用于站点应用程序日志,工作正常。

但是 IIS W3SVCxx 日志文件夹 不会创建 也不会手动创建它们有任何区别。 没有创建 IIS 日志文件

事实证明,IIS 要求在日志目录上专门为计算机 (%USERDOMAIN%\%COMPUTERNAME%) 设置完全控制权限。我不知道为什么,也找不到参考资料来解释它。

此权限存在于 Server1Server2 子文件夹,显然是从共享继承的,即使 Logs 父文件夹没有它。我没有添加那个权限,不知道这个要求,当然相信 WebServers 组权限就足够了。我不知道这些权限是如何添加的。

但是,%USERDOMAIN%\%COMPUTERNAME% Server1Server2 子文件夹 的权限 不可继承.因此无法写入 ServerN\mywebsite 文件夹并且从未创建 W3SVCxx 子文件夹。

将此权限添加到 Server1Server2 文件夹解决了这个问题,只要我使用 \ad.mydomain.com\Logs\%COMPUTERNAME%\mywebsite 作为日志目录。

第二个问题没有解决

虽然使用符号 link c:\inetpub\mywebsite\logs -> \ad.mydomain.com\Logs\%COMPUTERNAME%\mywebsite 在开始时确实有效,并且在修复权限问题后工作了一段时间,但它停止了再次工作,我找不到任何信息来解释原因。

结论

将 IIS 日志记录目录设置为站点名称文件夹的唯一真正优势是我不需要知道站点 ID 即可找到正确的 W3SVCxx 文件夹。但是,作为一个天生的极简主义者,我决定忽略权限问题并将网站的日志目录设置为 \ad.mydomain.com\Logs\%COMPUTERNAME%。必须查找站点 ID 是为了恢复我的日志而付出的很小的代价。

我强烈建议使用此解决方案,并尽可能避免将日志记录到 symlinks。