当前位置:首页 > 虚拟主机 > 正文

IIS如何限制域名访问?iis限制域名访问设置教程

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

利用 IIS 主机头限制(基础且推荐)

这是最标准且性能最好的方式,IIS 的绑定机制本身就支持基于域名的虚拟主机,如果配置得当,未绑定的域名将无法访问该站点。

IIS如何限制域名访问?iis限制域名访问设置教程 第1张

  1. 打开 IIS 管理器:在服务器上打开“Internet Information Services (IIS) 管理器”。
  2. 选择站点:在左侧连接面板中,展开服务器节点,找到“网站”文件夹,选中需要限制的主机站点。
  3. 编辑绑定:在右侧操作面板中点击“编辑绑定”,或者右键点击站点选择“编辑绑定”。
  4. 配置主机名
    • 选中现有的 HTTP 或 HTTPS 绑定。
    • 在“主机名”栏中,输入你允许访问的域名(www.example.com)。
    • 关键点:确保“主机名”栏不为空,如果留空,IIS 将接受所有发往该 IP 和端口(80/443)的请求。
    • 如果有多个域名需要访问,可以添加多个绑定条目,每个条目对应一个不同的主机名。
  5. 保存并测试:保存设置后,尝试使用未绑定的域名或 IP 地址访问站点,理论上,IIS 会返回 404 错误(取决于具体的错误页配置)或连接重置,因为该请求没有匹配到任何具有主机头绑定的站点。

使用 URL 重写模块(高级且灵活)

如果需要在同一站点下对特定域名进行更复杂的逻辑判断(重定向到 HTTPS、记录日志、或返回特定的 403/404 页面),IIS 的 URL 重写模块是最佳选择,此方法允许你定义规则,明确拒绝非预期域名的访问。

  1. 安装 URL 重写模块:如果尚未安装,请从微软官网下载并安装“URL Rewrite Module”。
  2. 编辑 web.config:在站点根目录下找到 web.config 文件,或者通过 IIS 管理器中的“URL 重写”功能进行可视化配置。
  3. 添加拒绝规则:在 <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 段的访问,其他所有请求一律拒绝。

IIS如何限制域名访问?iis限制域名访问设置教程 第2张

注意事项与最佳实践

  • 默认站点冲突:确保没有“默认网站”或其他站点绑定在相同的 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> 部分,使用 表示“或”逻辑。

IIS如何限制域名访问?iis限制域名访问设置教程 第3张

<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 页面,以提供友好的用户体验并隐藏服务器细节。

0