在IIS Express中使用自定义域

传统上我使用本地主机开发服务器使用自定义域。 有些东西是:

dev.example.com dev.api.example.com 

这为我使用Facebook等外部API提供了很大的灵活性。 这在过去使用Visual Studio开发服务器的工作很好,因为我需要做的就是将CNAME添加到指向127.0.0.1 DNSlogging。

但是我一直无法得到这个与IIS Express的工作。 我所尝试的一切似乎都失败了。 我甚至已经将正确的XMLconfiguration文件添加到IIS Express的applicationHost.config文件中,但似乎没有将这些条目识别为真正的IIS安装。

 <binding protocol="http" bindingInformation="*:1288:dev.example.com" /> 

每当我input这一行,并尝试请求http://dev.example.com:1288我收到以下消息:

错误的请求 – 无效的主机名

有人知道我是否错过了一些明显的东西吗? 还是IIS Express团队真的缺乏这种用途的远见?

这是什么对我有用(VS 2013更新,请参阅2010年修订历史, VS 2015看到这个: https : //stackoverflow.com/a/32744234/218971 ):

  1. 右键单击您的Web应用程序项目▶ PropertiesWeb ,然后configurationServers部分,如下所示:
    • 从下拉列表中selectIIS Express▼
    • 项目url: http://localhost
    • 覆盖应用程序的根URL: http://dev.example.comhttp://dev.example.com
    • 点击创build虚拟目录 (如果你在这里得到一个错误,你可能需要禁用IIS 5/6/7/8,将IIS的Default Site更改为除端口:80任何东西,确保Skype没有使用端口80等)
  2. 可选:将Start URL设置为http://dev.example.com
  3. 打开%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (Windows XP,Vista和7),并在<sites>configuration块中编辑站点定义,以符合以下内容:

     <site name="DevExample" id="997005936"> <application path="/" applicationPool="Clr2IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\path\to\application\root" /> </application> <bindings> <binding protocol="http" bindingInformation=":80:dev.example.com" /> </bindings> <applicationDefaults applicationPool="Clr2IntegratedAppPool" /> </site> 
  4. 如果运行MVC:确保applicationPool被设置为“集成”选项之一(如“Clr2IntegratedAppPool”)。

  5. 打开您的hosts文件并添加行127.0.0.1 dev.example.com
  6. ►开始你的申请!

来自评论的一些伟大的build议:

  • 您可能需要以pipe理员身份运行Visual Studio。
  • 如果你想让其他开发者看到你的IIS运行netsh http add urlacl url=http://dev.example.com:80/ user=everyone
  • 如果您希望网站为所有主机设置bindingInformation="*:80:" 。 使用任何你想要的端口,80只是方便。

对于Visual Studio 2015 ,上述答案中的步骤适用,但applicationhost.config文件位于新位置。 在你的“解决scheme”文件夹中,按照path,如果你升级了,你的机器上会有两个applicationhost.config版本,这会让你感到困惑。

 \.vs\config 

在该文件夹中,您将看到您的applicationhost.config文件

或者,您可以search您的解决scheme文件夹的.config文件,并find它的方式。

我个人使用了以下configuration:

在这里输入图像描述

在我的主机文件中使用以下内容:

 127.0.0.1 jam.net 127.0.0.1 www.jam.net 

以下在我的applicationhost.config文件中:

 <site name="JBN.Site" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Dev\Jam\shoppingcart\src\Web\JBN.Site" /> </application> <bindings> <binding protocol="http" bindingInformation="*:49707:" /> <binding protocol="http" bindingInformation="*:49707:localhost" /> </bindings> </site> 

请记住以pipe理员身份运行Visual Studio 2015的实例! 如果你不想每次都推荐这样做:

如何以pipe理员身份运行Visual Studio默认情况下

我希望这有助于某人,当我尝试升级到Visual Studio 2015时,我遇到了一些问题,并意识到我的configuration没有一个被传输。

在IIS Express中使用Visual Studio 2012时, 更改现有的绑定不能永久使用。 (它可能会工作,直到你closuresVS,但之后,事情真的搞砸了。)

关键是保持现有的本地主机绑定,并添加一个新的绑定。

除非以pipe理员身份运行,否则还需要运行netsh add urlacl (为自己授予以非标准用户身份运行非本地主机站点的权限)。

如果你想允许任何主机名,完整的过程如下:

  1. 创build您的Web应用程序,并找出它正在使用的端口(请参阅项目属性,Web选项卡,Project Url)。
  2. 从pipe理员提示符处运行以下命令(用#1中指定的端口号replaceportnumber ):

     netsh http add urlacl url="http://*:portnumber/" user=everyone netsh http add urlacl url="http://localhost:portnumber/" user=everyone 

您也可以使用您的用户名(DOMAIN \ USER)而不是所有人来提高安全性。

  1. 打开applicationhost.config(通常在My Documents \ IIS Express \ config下),并find包含您的端口号的元素。
  2. 添加一个你想要的主机名绑定(在这种情况下,*)。 例如:

     <site name="MvcApplication1" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\sites\MvcApplication1" /> </application> <bindings> <binding protocol="http" bindingInformation="*:12853:localhost" /> <binding protocol="http" bindingInformation="*:12853:*" /> </bindings> </site> 

请注意,如果要打开所有主机名(*),则需要两个netsh命令(一个用于*,另一个用于localhost)。 如果你只想打开一个特定的主机名,你不需要第二个netsh命令(localhost)。 只有具有特定主机名的那个就足够了。

无效的主机名表示您在IIS Expressconfiguration文件中configuration的实际站点(最有可能)未运行。 IIS Express没有像IIS那样的stream程模型。


为了让您的网站运行,需要明确地启动它(通过从webmatrix打开和访问,或者从/ site参数命令行调用iisexpress.exe(从它的安装目录)。


通常,允许完全合格的DNS名称用于本地访问的步骤是让我们使用您的DNS名称dev.example.com

  1. 编辑%windows%\ system32 \ drivers \ etc \ hosts文件,将dev.example.com映射到127.0.0.1(需要pipe理员权限)。 如果你控制DNS服务器(就像在Nick的情况下),那么DNS条目就足够了,因为这一步是不需要的。
  2. 如果您通过代理访问互联网,请确保dev.example.com不会被代理(您必须放入您的浏览器的例外列表中(对于IE,它将是工具/ Internet选项/连接/局域网设置,然后转到代理服务器/高级,并将dev.example.com放在豁免列表中。
  3. 为您的站点configurationIIS Express绑定(例如:Site1)以包含dev.example.com。 需要pipe理权限才能使用绑定。 或者,可以使用http.sys进行一次性URL保留

    netsh http add urlacl url=http://dev.example.com:<port>/ user=<user_name>

  4. 启动iisexpress /site:Site1或在WebMatrix中打开Site1

在我的WebMatrix上,从"*:80:localhost"更改为"*:80:custom.hostname" IIS Express安装不起作用(即使有适当的etc \ hosts映射,“Bad Hostname” "*:80:" 做了工作 – 没有在这里的其他答案所需的额外步骤。 注意"*:80:*"不会这么做; 放下第二个星号。

我试图将公有IP地址集成到我的工作stream程中,这些答案没有帮助(我喜欢使用IDE作为IDE)。 但是,上面的介绍给我的解决scheme(经过大约2小时的打击我的头墙壁,以使其与Visual Studio 2012 / Windows 8集成)这里是最终为我工作。

VisualStudio生成的applicationhost.config位于C:\Users\usr\Documents\IISExpress\config

  <site name="MySite" id="1"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Users\usr\Documents\Visual Studio 2012\Projects\MySite" /> </application> <bindings> <binding protocol="http" bindingInformation="*:8081:localhost" /> <binding protocol="http" bindingInformation="*:8082:localhost" /> <binding protocol="http" bindingInformation="*:8083:192.168.2.102" /> </bindings> </site> 
  • 将IISExpress设置为以Administrator身份运行,以便它可以绑定到外部地址(不是本地主机)
  • Administrator身份运行Visual Stuio,以便可以以pipe理员身份启动进程,以便进行绑定。

最终的结果是你可以浏览到192.168.2.102在我的情况和testing(例如在一个Android模拟器,我真的希望这可以帮助别人,因为这对我来说绝对是一个恼人的过程。

显然这是一个安全function,我很乐意看到残疾人。

遵循Jaro的build议,我能够在Windows XP和IIS Express(通过Web Matrix安装)下进行小的修改,并且不仅限于本地主机。 这只是正确设置绑定的问题。

  1. 使用WebMatrix从您的Web应用程序根目录中的文件夹创build一个新的站点。
  2. closuresWebMatrix。
  3. 打开%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (Windows XP,Vista和7path将类似),并在<sites>configuration块中编辑站点定义,如下所示:
     <site name="DevExample" id="997005936"> <application path="/" applicationPool="Clr2IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\path\to\application\root" /> </application> <bindings> <binding protocol="http" bindingInformation="*:80:dev.example.com" /> </bindings> <applicationDefaults applicationPool="Clr2IntegratedAppPool" /> </site> 

如果运行MVC,则将applicationPool保持为“集成”选项之一。

最新的答案是有效的..这个信息帮了我很多。 我知道这个话题已经讨论过,但我想添加一些额外的input。 人们说你必须“手动编辑”Users IISExpress / Config目录下的application.config文件。 这对我来说是一个很大的问题,因为我想通过Source控件将configuration分发给不同的开发人员。

我发现的是,您可以使用“C:\ Program Files \ IIS Express \ appcmd.exe”程序自动更新此文件。 找出控制参数需要一段时间,但是在这里分享我的发现。 从本质上讲,你可以创build一个运行NETSH命令和APPCMD.EXE的.bat文件(也可以换出一个主机文件,如果你喜欢的话),使用IIS Express来简化主机头文件。

你的安装bat文件看起来像这样:

 netsh http add urlacl url=http://yourcustomdomain.com:80/ user=everyone "C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /+bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com'] 

我也会做一个“卸载”蝙蝠文件,将清理这些绑定..(因为经常我只是伪造DNS,以便我可以处理主机名敏感的代码)

 netsh http delete urlacl url=http://yourcustomdomain.com:80/ "C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /-bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com'] 

我希望这些信息对某人有帮助。我花了一点时间才发现。

就像上面的Jessa Flint一样,我不想手动编辑.vs \ config \ applicationhost.config,因为我希望更改在源代码pipe理中保持不变。 我也不想有一个单独的batch file。 我正在使用VS 2015

项目属性→生成事件→预生成事件命令行: 项目属性的屏幕截图

 ::The following configures IIS Express to bind to any address at the specified port ::remove binding if it already exists "%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /-bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config" ::add the binding "%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /+bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config" 

只要确保您将端口号更改为您所需的端口。

大卫的解决scheme是好的。 但是我发现页面中的<script>alert(document.domain);</script>仍然提示“localhost”,因为Project Url仍然是本地主机,即使它已经被http://dev.example.com覆盖。 我遇到的另一个问题是,即使我已经按照David Murdoch的build议使用80端口号码禁用了Skype,端口80也已经被使用。 所以我想出了另一个更容易的解决scheme:

  1. 以pipe理员身份运行记事本,并打开C:\ Windows \ System32 \ drivers \ etc \ hosts,添加127.0.0.1 mydomain,并保存该文件;
  2. 在Visual Studio 2013中打开Web项目(注意:还必须以pipe理员身份运行),点击工程 – >属性 – > Web(让我们假设“IIS Express”选项下的Project Url为http://localhost:33333/ ),然后将其从http://localhost:33333/更改为http://mydomain:333333/注意:在此更改之后,您不应该单击Project Url框右侧的“Create Virtual Directory”button也不要单击Visual Studio的保存button,因为它们不会成功。 您可以在下一步3之后保存设置。
  3. 打开%USERPROFILE%\ My Documents \ IISExpress \ config \ applicationhost.config,search“33333:localhost”,然后将其更新为“33333:mydomain”并保存该文件。
  4. 保存您在第2步中提到的设置。
  5. 右键单击您的visual studio中的网页,然后单击“在浏览器中查看”。 现在页面将在http://mydomain:333333/下打开,并且页面中的<script>alert(document.domain);</script>将会提醒“mydomain”。

注意:上面列出的端口号被假定为33333.您需要将其更改为您的visual studio设置的端口号。

编辑后:今天我尝试了另一个域名,并得到以下错误: 无法启动IIS Express Web服务器。 无法注册URL …访问被拒绝。 (0x80070005) 。 我通过右键单击Windows任务栏右下angular的IIS Express图标退出IIS Express,然后以pipe理员身份重新启动Visual Studio,问题就消失了。

我正在使用iisexpress-proxy(来自npm)。

https://github.com/icflorescu/iisexpress-proxy

留下这里,以防万一任何人需要…

我需要为IIS Express中的Wordpress多站点设置提供自定义域,但是以pipe理员身份运行Webmatrix / Visual Studio之前,没有任何工作。 然后我能够将子域绑定到同一个应用程序。

 <bindings> <binding protocol="http" bindingInformation="*:12345:localhost" /> <binding protocol="http" bindingInformation="*:12345:whatever.localhost" /> </bindings> 

然后去http://whatever.localhost:12345/将会运行。