![如何在 IIS7 上的子域内运行多个 MVC 应用程序?](https://linux22.com/image/595358/%E5%A6%82%E4%BD%95%E5%9C%A8%20IIS7%20%E4%B8%8A%E7%9A%84%E5%AD%90%E5%9F%9F%E5%86%85%E8%BF%90%E8%A1%8C%E5%A4%9A%E4%B8%AA%20MVC%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
您好,感谢您的关注。
背景
我目前正在完成一份开发合同,客户希望我将应用程序的构建推送到他们基于 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
首先,您是否从本地服务器测试这些绑定?如果是这样,则有两个问题:
- 为了测试目的,您需要将 myapp 别名放在本地 hosts 文件 (C:\Windows\System32\Drivers\etc\hosts) 中。
- 您需要禁用环回保护,如果您使用 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 名称。