在 Windows Server 环境中,IIS(Internet Information Services)作为常用的 Web 服务器,默认情况下允许通过 IP 地址直接访问网站,出于安全加固、SEO 优化或防止恶意解析的目的,管理员往往需要限制只有特定的域名才能访问站点,而拒绝其他域名或 IP 的直接访问,实现这一目标主要依赖于 IIS 内置的“主机头”功能以及更灵活的 URL 重写模块。

利用 IIS 主机头限制(基础且推荐)
这是最标准且性能最好的方式,IIS 的绑定机制本身就支持基于域名的虚拟主机,如果配置得当,未绑定的域名将无法访问该站点。
- 打开 IIS 管理器:在服务器上打开“Internet Information Services (IIS) 管理器”。
- 选择站点:在左侧连接面板中,展开服务器节点,找到“网站”文件夹,选中需要限制的主机站点。
- 编辑绑定:在右侧操作面板中点击“编辑绑定”,或者右键点击站点选择“编辑绑定”。
- 配置主机名:
- 选中现有的 HTTP 或 HTTPS 绑定。
- 在“主机名”栏中,输入你允许访问的域名(
www.example.com)。 - 关键点:确保“主机名”栏不为空,如果留空,IIS 将接受所有发往该 IP 和端口(80/443)的请求。
- 如果有多个域名需要访问,可以添加多个绑定条目,每个条目对应一个不同的主机名。
- 保存并测试:保存设置后,尝试使用未绑定的域名或 IP 地址访问站点,理论上,IIS 会返回 404 错误(取决于具体的错误页配置)或连接重置,因为该请求没有匹配到任何具有主机头绑定的站点。
使用 URL 重写模块(高级且灵活)
如果需要在同一站点下对特定域名进行更复杂的逻辑判断(重定向到 HTTPS、记录日志、或返回特定的 403/404 页面),IIS 的 URL 重写模块是最佳选择,此方法允许你定义规则,明确拒绝非预期域名的访问。
- 安装 URL 重写模块:如果尚未安装,请从微软官网下载并安装“URL Rewrite Module”。
- 编辑 web.config:在站点根目录下找到
web.config文件,或者通过 IIS 管理器中的“URL 重写”功能进行可视化配置。 - 添加拒绝规则:在
<system.webServer>节点下添加<rewrite>配置,以下是一个典型的配置示例,用于拒绝所有非www.example.com的访问:
<configuration>
<system.webServer>
<rewrite>
<rules>
<!-规则:如果主机头不是 www.example.com,则拒绝访问 -->
<rule name="Block Non-Allowed Domains" stopProcessing="true">
<match url="(.)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www.example.com$" negate="true" />
</conditions>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Access Denied" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
- 逻辑解析:
<match url="(.)">:匹配所有请求路径。<add input="{HTTP_HOST}" pattern="^www.example.com$" negate="true" />:检查请求头中的 Host 字段。negate="true"表示如果 Host 不匹配www.example.com,则条件成立。<action type="CustomResponse" ... />:当条件成立时,返回 403 Forbidden 状态码,你也可以将type改为Redirect将其重定向到合法域名。
结合 IP 限制与域名验证(双重防护)
在某些高安全场景下,可以结合 IP 限制和域名验证,虽然 IIS 本身不直接提供“仅允许特定域名+特定 IP”的单一规则,但可以通过 URL 重写模块组合条件。
| 配置项 | 说明 | 示例值 |
|---|---|---|
| HTTP_HOST | 请求中的域名头 | www.example.com |
| REMOTE_ADDR | 客户端 IP 地址 | 168.1.100 |
| negate 属性 | 是否取反条件 | true (不匹配时触发) |
| action 类型 | 执行的操作 | CustomResponse (返回错误) 或 Redirect (跳转) |
通过组合多个 <add input="..." /> 条件,可以实现更精细的控制,只允许 www.example.com 且来自特定 IP 段的访问,其他所有请求一律拒绝。

注意事项与最佳实践
- 默认站点冲突:确保没有“默认网站”或其他站点绑定在相同的 IP 和端口上且主机头为空,如果有,IIS 可能会将未匹配到主机头的请求路由到默认站点,导致限制失效,建议删除或禁用不必要的默认绑定。
- HTTPS 证书问题:对于 HTTPS 站点,浏览器会在建立 TLS 连接之前验证证书,如果用户通过未绑定的域名访问,浏览器可能会显示证书名称不匹配警告,甚至在 TLS 握手阶段就断开连接,IIS 的 URL 重写规则可能无法执行,对于 HTTPS,主机头绑定是更基础的防线。
- 测试验证:配置完成后,务必使用
curl -H "Host: otherdomain.com" http://your-ip或浏览器开发者工具模拟不同 Host 头进行测试,确保非授权域名被正确拒绝。
相关问题与解答
问题 1:如果我的网站同时支持 www.example.com 和 example.com,如何配置才能同时允许这两个域名访问,而拒绝其他域名?
解答:
在 URL 重写模块中,可以使用正则表达式来匹配多个域名,修改 <conditions> 部分,使用 表示“或”逻辑。
<conditions>
<add input="{HTTP_HOST}" pattern="^(www.)?example.com$" negate="true" />
</conditions>
这里 ^(www.)?example.com$ 会匹配 example.com 和 www.example.com,Host 头不匹配这两个域名中的任何一个,negate="true" 将使条件成立,从而触发拒绝访问的动作。
问题 2:使用 URL 重写拒绝非授权域名后,用户访问时看到的是默认的 404 页面还是自定义的 403 页面?如何自定义?

解答:
这取决于你在 <action> 中的配置。
- 如果配置为
type="CustomResponse",你可以指定statusCode="403"和statusDescription="Forbidden",IIS 会返回 403 状态码,至于显示的具体 HTML 页面,取决于 IIS 的“错误页”配置,你可以在 IIS 管理器中点击“错误页”,为 403 错误设置自定义 HTML 文件。 - 如果配置为
type="Redirect",用户会被重定向到你指定的 URL(例如重定向到首页或一个说明页面)。 - 如果不做任何自定义,IIS 通常会返回其默认的简短错误页面,建议在生产环境中自定义 403 或 404 页面,以提供友好的用户体验并隐藏服务器细节。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/470852.html