在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 ):
- 右键单击您的Web应用程序项目▶
Properties
▶Web
,然后configurationServers
部分,如下所示:- 从下拉列表中selectIIS Express▼
- 项目url:
http://localhost
- 覆盖应用程序的根URL:
http://dev.example.com
:http://dev.example.com
- 点击创build虚拟目录 (如果你在这里得到一个错误,你可能需要禁用IIS 5/6/7/8,将IIS的
Default Site
更改为除端口:80
任何东西,确保Skype没有使用端口80等)
- 可选:将
Start URL
设置为http://dev.example.com
-
打开
%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>
-
如果运行MVC:确保
applicationPool
被设置为“集成”选项之一(如“Clr2IntegratedAppPool”)。 - 打开您的
hosts
文件并添加行127.0.0.1 dev.example.com
。 - ►开始你的申请!
来自评论的一些伟大的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
(为自己授予以非标准用户身份运行非本地主机站点的权限)。
如果你想允许任何主机名,完整的过程如下:
- 创build您的Web应用程序,并找出它正在使用的端口(请参阅项目属性,Web选项卡,Project Url)。
-
从pipe理员提示符处运行以下命令(用#1中指定的端口号replaceportnumber ):
netsh http add urlacl url="http://*:portnumber/" user=everyone netsh http add urlacl url="http://localhost:portnumber/" user=everyone
您也可以使用您的用户名(DOMAIN \ USER)而不是所有人来提高安全性。
- 打开applicationhost.config(通常在My Documents \ IIS Express \ config下),并find包含您的端口号的元素。
-
添加一个你想要的主机名绑定(在这种情况下,*)。 例如:
<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
- 编辑%windows%\ system32 \ drivers \ etc \ hosts文件,将dev.example.com映射到127.0.0.1(需要pipe理员权限)。 如果你控制DNS服务器(就像在Nick的情况下),那么DNS条目就足够了,因为这一步是不需要的。
- 如果您通过代理访问互联网,请确保dev.example.com不会被代理(您必须放入您的浏览器的例外列表中(对于IE,它将是工具/ Internet选项/连接/局域网设置,然后转到代理服务器/高级,并将dev.example.com放在豁免列表中。
-
为您的站点configurationIIS Express绑定(例如:Site1)以包含dev.example.com。 需要pipe理权限才能使用绑定。 或者,可以使用http.sys进行一次性URL保留
netsh http add urlacl url=http://dev.example.com:<port>/ user=<user_name>
-
启动
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安装)下进行小的修改,并且不仅限于本地主机。 这只是正确设置绑定的问题。
- 使用WebMatrix从您的Web应用程序根目录中的文件夹创build一个新的站点。
- closuresWebMatrix。
- 打开
%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:
- 以pipe理员身份运行记事本,并打开C:\ Windows \ System32 \ drivers \ etc \ hosts,添加127.0.0.1 mydomain,并保存该文件;
- 在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之后保存设置。 - 打开%USERPROFILE%\ My Documents \ IISExpress \ config \ applicationhost.config,search“33333:localhost”,然后将其更新为“33333:mydomain”并保存该文件。
- 保存您在第2步中提到的设置。
- 右键单击您的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)。
留下这里,以防万一任何人需要…
我需要为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/将会运行。
- Application_End global.asax
- Windows 10中的IISpipe理器
- 在VS dev服务器和IIS上为ASP.NET MVC应用程序设置文化
- IIS:将所有请求redirect到一个页面?
- 为什么IIS线程与常规CLR线程相比如此珍贵?
- 处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误的模块“ManagedPipelineHandler”
- 如何创build基本身份validation的用户帐户?
- 允许在Visual Studio Express 2013 for Web中加载JSON文件
- 长ASP.NET操作的IIS请求超时