网络共享访问上的 IIS 7 虚拟目录被拒绝

网络共享访问上的 IIS 7 虚拟目录被拒绝

我有一台负载平衡的 Web 服务器,我正尝试在一台服务器 (server02) 上设置虚拟目录,并将其设置为另一台服务器 (server01) 上的网络共享。两台服务器都是 Windows 2008R2 上的 IIS 7。它们不属于域。

我在 server02 上设置了虚拟目录,并以 server01 管理员的身份连接到网络共享(出于测试目的)。

在 IIS 中,我可以浏览虚拟目录中的文件。当我在虚拟目录基本设置中单击“测试设置”时,没有错误,虚拟目录可以毫无问题地连接到共享。

但是,当我尝试请求文件时(http://server02/media/image.jpg) 通过虚拟目录时出现此配置错误“ An error occurred loading a configuration file: Failed to start monitoring changes to '\\server01\media' because access is denied.”。

我不知道是什么原因造成的,因为根据 IIS,连接是正常的。

答案1

运行您网站应用程序池的用户帐户需要拥有该共享的权限。将其更改为拥有该共享权限的帐户,您就没问题了。

此外,如果 server01 成为单点故障,那么负载平衡 Web 服务器的意义何在?您应该复制该数据或使用共享存储对 Web 服务器进行集群。您尝试做的事情并不是一个好主意。

答案2

  1. 在两个系统上添加具有相同密码的本地用户
  2. 授予该用户对共享的访问权限
  3. 在您的网络服务器上,以该用户名运行您的应用程序池。

如果您要自动扩展服务器,那么您将需要在代码中执行此操作,您可以执行以下操作:

net.exe user  MyNewLocalUser Password! /ADD
net.exe share MyNewShare=C:\MyPath /Grant:MyNewLocalUser,full

如果您正在动态启动您的网络服务器,您可以使用以下代码来创建虚拟目录并将应用程序池更改为新用户。

            Using mgr As New ServerManager
            Dim MainApp As Site = mgr.Sites(SiteName)
            mgr.Sites(SiteName).Applications(0).VirtualDirectories.Add("/MyVirDir", "\\server\share")

            Dim appPool As String = Nothing
            For Each app In MainApp.Applications
                appPool = app.ApplicationPoolName

            Dim myAppPool As ApplicationPool = mgr.ApplicationPools(appPool)
            myAppPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser
            myAppPool.ProcessModel.UserName = "MyNewLocalUser"
            myAppPool.ProcessModel.Password = "Password!"
            mgr.CommitChanges()
            Next

        End Using

相关内容