如何限制Windows服务器Web服务仅允许通过主机名访问,禁止使用IP地址访问?
如何限制Windows服务器Web服务仅允许通过主机名访问,禁止使用IP地址访问?
嗨,我来给你几个实用的方案,帮你实现这个需求,都是Windows服务器上常用的方法:
方法一:使用IIS URL重写模块(最推荐)
这是Windows IIS环境下最直接的方案,通过URL重写规则拦截所有IP地址的访问请求:
- 首先确保你的IIS服务器安装了URL重写模块,如果没装,可以在IIS管理器的“管理”板块里找到“Web平台安装程序”,搜索并安装URL Rewrite。
- 打开IIS管理器,找到你的目标Web站点,双击右侧功能视图里的“URL重写”。
- 点击右侧“添加规则”,选择“空白规则”,然后按以下配置:
- 名称:随便取个好记的,比如“Block IP Access”
- 匹配URL:选择“与模式匹配”,模式填
.*,忽略大小写打勾 - 条件:点击“添加”,输入框里填
{HTTP_HOST},模式填^(\d{1,3}\.){3}\d{1,3}$(这个正则用来匹配IP地址格式),逻辑分组选“匹配任何条件” - 操作:选择“自定义响应”,状态码填
403,状态原因填Forbidden,状态描述填Access via IP address is not allowed.
- 保存规则后,用IP访问站点就会直接返回403禁止访问,只有用主机名访问才能正常打开。
方法二:直接修改Web.config配置(适合ASP.NET站点)
如果你的站点是ASP.NET技术栈,也可以直接修改站点根目录下的Web.config文件,添加重写规则,效果和上面一样:
<configuration> <system.webServer> <rewrite> <rules> <rule name="Block IP Access" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^(\d{1,3}\.){3}\d{1,3}$" /> </conditions> <action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Access via IP address is not allowed." /> </rule> </rules> </rewrite> </system.webServer> </configuration>
修改完保存,站点会自动加载新配置,不用重启IIS。
方法三:结合SSL证书强化限制(额外保障)
如果你的Web服务用了HTTPS,记得把SSL证书绑定到主机名而不是IP地址。这样用户用IP访问时,浏览器会弹出证书不匹配的错误,进一步阻止IP访问的行为,和上面的重写规则形成双重保障。
注意事项
- 确保你的局域网DNS服务器已经正确配置了主机名到服务器IP的解析,用户的设备能正常通过主机名找到服务器。
- 如果你的服务器有多个IP地址,要确保正则规则能覆盖所有可能的IP访问情况(上面的正则已经支持标准IPv4格式)。
备注:内容来源于stack exchange,提问作者Pablo




