如何在 IIS7 上的子域内运行多个 MVC 应用程序?

如何在 IIS7 上的子域内运行多个 MVC 应用程序?

您好,感谢您的关注。

背景

我目前正在完成一份开发合同,客户希望我将应用程序的构建推送到他们基于 IIS 7 的服务器上,他们希望在该服务器上运行多个 MVC 应用程序。

我首先遇到的一个问题是,该服务器已经是其大型网络的一个子域。因此,如果我SERVERNAME在浏览器中输入,它会自动定向到SERVERNAME.COMPANYNAME.COM

现在,如果我将应用程序放在默认网站/根目录中,这就可以了。在这种情况下,单击请求的链接admin.html将照常定向到“SERVERNAME.COMPANYNAME.COM/admin.html”。

但他们希望我将应用程序放在此服务器的子域中,以便他们也可以在同一服务器上运行其他应用程序。所以我认为我需要,MYAPP.SERVERNAME.COMPANYNAME.COM但我不知道该怎么做。

问题更复杂,因为我的应用以及他们希望安装的未来应用都是基于 MVC 的,它会拦截并重写 URL。我认为,如果我能成功将我的应用放入子域中,这个问题就会迎刃而解。

我尝试过

  • 在服务器上自己的应用程序池中创建新站点
  • 将该站点的绑定设置为MYAPP.SERVERNAME.COMPANYNAME.COM
  • 将该站点的绑定设置为MYAPP
  • 将该站点的绑定设置为MYAPP.SERVERNAME
  • 将该站点的绑定设置为MYAPP.SERVERNAME.COM
  • 将该站点的绑定设置为MYAPP.COMPANYNAME.COM

什么都没起作用。我是不是漏掉了一些简单的东西?

谢谢,

马特

答案1

首先,您是否从本地服务器测试这些绑定?如果是这样,则有两个问题:

  1. 为了测试目的,您需要将 myapp 别名放在本地 hosts 文件 (C:\Windows\System32\Drivers\etc\hosts) 中。
  2. 您需要禁用环回保护,如果您使用 DNS 别名,这将阻止您从服务器本身访问服务器上的服务。我有一个此处对此问题进行了描述(它经常使 SharePoint 管理员感到困惑)。快速解决方案(尽管它会禁用 Windows 的一个小安全功能)是从 PowerShell(以管理员身份运行)提示符运行它:New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name "DisableLoopbackCheck" -value "1" -PropertyType dword -Force然后重新启动。

之后,我想说,总的来说,这与 MVC 关系不大,而是与 DNS 关系大。您可以在 IIS 中创建任意数量的网站(MVC 或其他),并创建任何您想要的 DNS 名称,只要您告知网络 DNS 服务器名称与 IP 的匹配情况,以便人们可以找到它们即可。

听起来你习惯于将网站放在服务器上,然后http://servername从网络上的其他计算机使用。我一直喜欢做的是永远不要使用 Web 应用程序的主机名。我会在网络管理员使用的任何 DNS 解决方案(可能是 Windows DNS 服务器)中创建一个“DNS 别名”,以将“appname”指向为“servername”的别名。然后在网站绑定中输入我想要的主机标头。这里的优点是双重的,我可以在服务器上放置多个 Web 应用程序,然后我可以将该 Web 应用程序移动到其他地方而无需告诉用户(只需更改 DNS 别名指针)。

因此,在您的情况下,我建议http://myapp(假设它仅用于内部),并在 companyname.com 的 DNS 区域中为 myapp 添加一个 DNS 别名(CNAME 记录)以指向服务器名称。

如果您认为可以通过 Internet 从防火墙访问,则需要使用 FQDN,例如http://myapp.companyname.com。DNS 的步骤相同,您只需将其也放入 Internet DNS 中即可。

我不会使用 Web 服务器名称的子域名,因为这样只会让其上的所有应用都与该 Web 服务器绑定(您无法移动它们,因为每个用户都必须更改其链接和习惯)。myapp.companyname.com 或 myapp.servername.companyname.com 的工作量不会减少/增加,所以为什么不让每个人都使用 myapp.companyname.com 更方便呢。如果他们告诉您这是为了更轻松地识别位置,这就是 DNS 别名的用途……只需 ping myapp.companyname.com,DNS 别名将使 ping 告诉您真正的服务器 DNS 名称。

相关内容