我们有两台在 Windows Server 2012 R2 上运行 IIS 8.5 的 Web 服务器。这两台服务器位于负载均衡器后面。
网络服务器正在运行 ASP.NET MVC 应用程序,该应用程序除其他功能外,还允许用户访问 PDF 文件。这些 PDF 文件位于第三台服务器(文件服务器)上,并通过虚拟目录提供给两台网络服务器。每个虚拟目录中都有多个子目录。
我们目前在访问 PDF 文件时遇到了大量问题。访问连续几天都正常,然后突然出现问题,每当有人尝试访问 PDF 文件时,我们都会收到 500.19 错误。
这种情况通常一次只发生在一个 Web 服务器上,而且完全是随机发生的。每当出现问题时,唯一有帮助的就是回收应用程序池。在此之前,PDF 文件不可用。
另一个有趣的事实是,每次访问中断时,只会中断某些子目录,而其他子目录仍可工作。但是,中断工作的子目录并不总是相同,这里也是完全随机的。
我看了一下日志,这就是我得到的:
2014-03-05 08:03:44 W3SVC2 [服务器名称] [服务器 IP] 获取 [PATH_TO_PDF] - 80 - [LOADBALANCER_IP] [用户代理] [COOKIE] - 500 19 6 0 [原始客户端 IP]
我也尝试激活失败请求跟踪,但它实际上并没有提供比 IIS 日志更多的信息。
有什么方法可以找出为什么对 pdf 文件的访问(顺便说一下,这些文件确实存在 - 当第一个 Web 服务器发生故障时仍然可以从第二个 Web 服务器进行访问)会随机中断?
答案1
感谢 Sam Gould 通过电子邮件直接联系我,我找到了答案。
- 单击服务器/机器级别的配置编辑器
- 在下拉列表中选择并展开 System.applicationHost
- 选择站点设置
- 点击“收藏”部分下的…按钮
- 选择相关网站并将 allowSubDirConfig 设置为 False
- 执行 IIS 重置
或者我们也可以尝试运行 appcmd 命令:
C:\Windows\System32\inetsrv> appcmd.exe set config -section:system.applicationHost/sites /[name='My_Website'].virtualDirectoryDefaults.allowSubDirConfig:"False" /commit:apphost