我在 Windows Server 2008 R2 上的 IIS 7.5 上托管了多个 Web 应用程序。该服务器有一个 IP 地址,我使用主机名来区分与每个应用程序的绑定。该服务器具有与主机名匹配的不同 DNS 别名,因此在公司网络中一切都运行良好。例如:
- 当我输入http://内部网,“intranet”通过 DNS 解析为服务器的 IP,并向 IIS 发出请求,IIS 使用与“intranet”主机名的绑定,进而映射到 Intranet Web 应用程序。
问题是,我还希望用户能够使用服务器的 IP(公开)从公司网络外部访问应用程序。这意味着 IIS 还应该识别以下形式的请求http://xxx.xxx.xxx.xxx/内部网与 Intranet Web 应用程序相对应。我发现实现此目的的唯一方法是将所有 Web 应用程序的物理文件夹放在默认网站的物理文件夹下,并保留此网站的默认绑定。这意味着:
- 当我输入http://xxx.xxx.xxx.xxx/内部网,向 IIS 发出请求,IIS 使用没有主机名的绑定,进而映射到默认网站,并在该网站内查找“intranet”物理文件夹。
理论上一切应该都很好,但我遇到了以下问题。我托管的大多数 Web 应用程序都是 ASP.NET 应用程序,并使用 web.config 文件。当我通过第一种方法(即使用主机名)直接访问其中一个应用程序时,一切正常。但是,当我使用第二种方法访问它时,IIS 抱怨 web.config 中的某些设置处于不正确的级别。我知道为什么会发生这种情况:由于我设置绑定的方式,对 IIS 的请求是针对更高级别 Web 应用程序中的物理文件夹,而不是我打算访问的 Web 应用程序。
我的问题是:由于此配置策略破坏了 ASP.NET web.config 行为(可能还有其他行为),我是否应该考虑其他替代方案以允许基于名称和 IP 的访问?谢谢。
编辑。我现在已经找到了解决这个问题的方法;请参阅下面我自己的答案。
答案1
我已经找到了解决这个问题的方法。
我现在正在做的事情是这样的。我已将每个 Web 应用程序设置为:
- IIS 上的一个网站,它自己绑定到特定的主机名,例如我原始示例中的“intranet”。
- 默认网站下的 Web 应用程序,它保留没有主机名的默认捕获全部绑定。
例如,Intranet Web 应用程序在 IIS 上显示为名为“Intranet”的站点,并绑定到主机名“intranet”,以便人们以以下身份访问服务器http://内部网/将被引导至该处;并且它还会在服务器的默认网站下显示为名为“Intranet”的 WebB 应用程序,以便用户以http://xxx.xxx.xxx.xxx/内部网将被发送到那里以及。它们是到达相同物理文件夹和相同内容的两种不同方式,并且运行完美。
感谢所有提供帮助的人!
答案2
总之:不要使用第二种方法。
在站点的站点绑定中,只需指定内部网和yourpublicname.yourdomain.com 作为主机头。
然后,假设它可以通过互联网访问,则将为两者提供同一个站点,但具有不同的绑定。
转换站点的路径和从站点转换的路径很棘手;最好保持相同的站点布局并仅添加绑定?
(为什么不这样做呢?)