IIS7中的通配符子域。是否有可能使它们像在Apache中一样?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IIS7中的通配符子域。是否有可能使它们像在Apache中一样?相关的知识,希望对你有一定的参考价值。
这是否可以配置IIS7以实现像Apache一样的关于通配符域的功能?我对基于URL中使用的子域用户在ASP.NET Web应用程序中路由用户感兴趣。
这里描述的东西如下:
http://steinsoft.net/index.php?site=programming/articles/apachewildcarddomain
谢谢
答案是否,IIS7(仍然)不支持通配符主机名(请参阅this)。如果你想在一个网站上提供多个域名,那么现在唯一的解决方法就是使用专用的IP并使用支持通配符的DNS来实现。
2013 Update
为了完整起见,IIS8还没有此功能。
2016 Update
最后,Windows 2016中的IIS 10支持通配符子域。
IIS是否支持通配符主机标头?我可以捕获* .mydomain.com并将其重定向到一个网站吗?
答案是肯定/否定。是的,因为您可以将* .mydomain.com重定向到一个网站。不,因为神奇是在DNS而不是IIS。
这是你如何做到的: 在IIS MMC中,配置一个没有主机头的网站,然后为该站点分配IP地址。 (如果框中有一个IP地址,则可以跳过此处)。有了这个,网站将绑定到特定的IP,并将监听发送到IP的所有HTTP请求,你就完成了:)
下一步是确保您的名称解析适用于通配符查询并使用正确的IP地址进行回复。如果您使用Microsoft DNS服务,它将不允许您创建'*'A记录(假设您已在DNS MMC中创建了域区域),您需要执行以下操作:
- 导航到
%windir%system32dns
- 找到区域文件。例如。 mydomain.com.dns,用记事本打开它
- 添加条目。例如。
* A IP.IP.IP.IP
- 保存区域数据文件
- 在DNS MMC中重新加载区域数据。
请注意,通过执行此操作,所有*将响应您之前配置的IP。例如。 abc.mydomain.com,www.mydomain.com,K2k.mydomain.com等。
要验证它是否正常工作,请尝试ping实用程序ping (insert anything here).mydomain.com
,您应该收到来自IP.IP.IP.IP的回复
然后尝试浏览,http://(在此处插入任何内容).mydomain.com /,您应该获得已配置的相同网页。
您无法在Microsoft的DNS中创建通配符(*)A记录,但您可以创建通配符CNAME
。如果您要做的只是将所有子域指向特定的IP,这将起作用。例如,如果你有www.mydomain.com
的A记录,你可以为CNAME
添加一个*.mydomain.com
记录并指向www.mydomain.com
。请求标头中的主机名仍然是子域,因此您的Web应用程序应该能够捕获它并在需要时处理它。
如果使用Web平台安装程序(http://www.microsoft.com/web/downloads/platform.aspx)并安装“URL重写”模块,则可以使用IIS。如果添加“A”记录(如“* .example.com”),则允许将所有子域发送到IIS服务器。在IIS服务器中,您只需将URL重写规则添加到默认网站即可执行任何操作,例如重定向到另一个URL。当用户输入“xyz.example.com”时,您可以重定向到“example.com”,并将所有未知子域指向根域。步骤是:
- 安装Web平台安装程序:http://www.microsoft.com/web/downloads/platform.aspx 运行它,搜索“URL Rewrite”,然后安装它。
- 转到默认网站,然后打开“URL重写”。
- 点击最右侧的“添加规则”。
- 命名规则并设置以下内容: 请求的URL:匹配模式 使用:正则表达式 模式:(。*) 逻辑分组:全部匹配
- 添加新条件(单击“添加..”按钮),然后设置: 条件输入:{CACHE_URL} 检查输入字符串是否匹配模式 模式(根据需要修改):( http | https)://(。*?) .rootdomain .tld 单击[确定]。
- 现在向下滚动到操作并设置: 操作类型:重定向 重定向URL(根据需要进行修改):{C:1}://rootdomain.tld {R:0}
当您单击正则表达式模式条目旁边的“测试模式”按钮时,“{C:#}”和“{R:#}”来自测试窗口。您可以匹配部分服务器值并在以后重复使用。
此外,您可能希望在传递URL中的HTTP / HTTPS(上面的步骤6中的“{C:1}”)时查看此提示:http://weblogs.asp.net/owscott/url-rewrite-protocol-http-https-in-the-action
更新2:链接中断,升级到IIS 10,它现在支持通配符。
更新:这有一段时间了,过了一段时间我被多个请求轰炸了。我不推荐这种方法。
确保您的DNS记录设置正确(* - > @的CNAME记录),它将完美无缺地运行。测试了多个域。
链接破坏现在曾经是http://pzxc.com/apache-style-wildcard-hostname-rewrite-rules-in-iis
对于无法升级到IIS 10+的用户,通过反向代理启用通配符主机名并不是很困难。
HTTP示例如下,而其他设置只是几个步骤。
- 创建一个绑定到*:80并且没有主机名的catch-all站点。
- 创建绑定到*:8091的第一个站点,没有主机名。
- 创建绑定到*:8092且没有主机名的第二个站点。
- 测试两个站点并继续前进。
- 安装ARR和URL重写模块。
- 在catch-all站点上创建重写规则以将请求分派给两个站点,
<system.webServer> <rewrite> <rules> <rule name="site1" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^(.*).site1.com$" /> </conditions> <action type="Rewrite" url="http://localhost:8091/{R:0}" /> </rule> <rule name="site2" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^(.*).site2.com$" /> </conditions> <action type="Rewrite" url="http://localhost:8092/{R:0}" /> </rule> </rules> </rewrite> </system.webServer>
请注意,在服务器级别,必须打开ARR代理模式,
<system.webServer>
<proxy enabled="true" />
</system.webServer>
IIS 10通配符主机名更简单,性能也更好,因为ARR有其开销(但一般来说可以忽略不计)。
以上是关于IIS7中的通配符子域。是否有可能使它们像在Apache中一样?的主要内容,如果未能解决你的问题,请参考以下文章