通过localhost/folder访问另一台服务器上的IIS虚拟目录时发生运行时错误

通过localhost/folder访问另一台服务器上的IIS虚拟目录时发生运行时错误,iis,runtime-error,custom-errors,server-error,Iis,Runtime Error,Custom Errors,Server Error,我们有2台服务器,在server1中,IIS配置有一个虚拟目录,其中包含URL的HTML页面 在server2的IIS配置中,虚拟目录指向server1中的目录(与server1中配置的目录相同) 通过服务器1中的localhost访问URL时,会显示配置文件中提到的一般错误,而通过服务器2中的localhost访问URL时,会显示运行时错误(如下所述),尽管它指向的配置与服务器1指向的配置相同。服务器之间没有访问问题 “/”应用程序中的服务器错误 运行时错误: 说明:处理您的请求时发生异常。此

我们有2台服务器,在server1中,IIS配置有一个虚拟目录,其中包含URL的HTML页面

在server2的IIS配置中,虚拟目录指向server1中的目录(与server1中配置的目录相同)

通过服务器1中的localhost访问URL时,会显示配置文件中提到的一般错误,而通过服务器2中的localhost访问URL时,会显示运行时错误(如下所述),尽管它指向的配置与服务器1指向的配置相同。服务器之间没有访问问题

“/”应用程序中的服务器错误

运行时错误:

说明:处理您的请求时发生异常。此外,在执行第一个异常的自定义错误页时发生另一个异常。请求已被终止

网络配置:-

<customErrors defaultredirect="GeneralErrorPage.htm" mode ="On">
<error statuscode="404" redirect="GeneralErrorPage.htm"/>
</customErrors>

  • 设置
    • 在服务器1中将url托管为http://localhost/buyer/ 显示一般错误
    • 在server2中将url托管为http://localhost/buyer/ 显示运行时错误
  • IIS中的虚拟目录购买者有许多*.html页面 将url托管在服务器1和服务器2中作为http://localhost/buyer/info.html 显示 买方信息的用户界面页面
  • 很明显,server2在访问server1中的目录“buyer”时没有问题

      <?xml version="1.0" encoding="UTF-8"?>
        <configuration>
            <system.webServer>
             
                <httpErrors errorMode="Custom">
                    <remove statusCode="404" subStatusCode="-1" />
                    <remove statusCode="403" subStatusCode="-1" />
                    <error statusCode="403" prefixLanguageFilePath="" path="/GeneralErrorPage.htm" responseMode="ExecuteURL" />
                    <error statusCode="404" prefixLanguageFilePath="" path="/GeneralErrorPage.htm" responseMode="Redirect"  />
                   
                </httpErrors>
                <directoryBrowse enabled="false" />
           </system.webServer>
        <system.web>
    
          <customErrors defaultRedirect="GeneralErrorPage.htm" mode="Off">
           <error statusCode="404" redirect="GeneralErrorPage.htm"/>
          </customErrors>
    
    </system.web>
    </configuration>
    
    
    
    注意: 在同一url中追加html页面(GeneralErr.htm)时手动执行http://localhost/subtest/GeneralErr.htm,页面加载成功

    但是在托管url时http://localhost/subtest 从服务器2获取以下错误-获取访问错误或运行时错误

    配置错误 说明:处理服务此请求所需的配置文件时出错。请查看下面的特定错误详细信息,并适当修改配置文件

    分析器错误消息:加载配置文件时出错:无法开始监视对“\server1\c$\test\subtest”的更改,因为访问被拒绝

    关于虚拟目录的IIS配置 使用IIS8版本

    在Server1文件夹结构中:c:\test\subtest

    在Server2中:虚拟目录“子测试”的IIS配置 物理路径:\server1\c$\test\subtest 物理路径凭据:域\用户名
    虚拟路径:/subtest

    开始时出现的500.19错误就像错误描述中说的那样,不允许使用绝对路径,但应该使用相对路径。因此,您可以设置相对路径来解决此问题,或者在applicationhost中启用绝对路径,请遵循配置中带下划线的部分

    <httpErrors allowAbsolutePathsWhenDelegated="true" errorMode="Custom" lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
      ...
    </httpErrors>
    
    
    ...
    
    即使启用了相对路径,通过localhsot/subtest访问时仍会出现问题


    有两种方法可以解决这个问题,一种是将应用程序池修改为“无托管代码”和“经典”"设置。另一个是修改应用程序池的标识,将其设置为与管理员具有相同权限的用户,您可以创建一个用户或直接使用管理员。

    首先,您需要根据错误提示修改webconfig并进行设置,以便显示更详细的错误。其次,您可以尝试直接使用URL访问服务器1中的站点,以便确定问题是来自服务器1还是服务器2。最后,在出现问题的服务器上启用失败的请求跟踪。我已将webconfig修改为并在上面进行了更新。但无法确定问题。@Bruce Zhang解决错误所需的任何输入将“自定义错误模式”设置为“关闭”后,页面上应显示详细的错误信息。您应根据详细的错误信息查找问题。仅通过查看错误描述和配置文件很难找到问题的原因。同时,您还应启用失败的请求跟踪,并分析server1和server2上的日志。或者使用事件视图查看错误。@Bruce Zhang:我在上面的主线程中添加了一些注释。选择“无管理代码”有什么意义在IIS应用程序池中?更改是否会影响.NET应用程序?这与IIS是否会尝试将传入请求传递给使用.NET Framework的处理程序有关。通过关闭托管代码,.NET Framework CLR不会加载到应用程序池进程中,这会加快仅使用.NET Framework的应用程序的启动和请求处理使用本机代码(例如,经典ASP)生成的处理程序。当您为应用程序池指定.NET CLR版本为4.0时,IIS试图将一些ASP.NET支持库加载到其工作进程中。这会增加内存使用率和攻击面,并可能产生其他影响。