IIS配置文件限制IP访问错误代码0x80070021解决方法

IIS白名单限制可以访问的IP,可以通过

  • IIS管理器
  • 选择你要限制IP的网站
  • IP地址和域限制
  • 编辑功能设置,设置未指定的客户端的访问权为拒绝
  • 添加允许条目,添加允许访问的IP地址

这是一种通过IIS管理器,操作图形界面的方式实现IP白名单的方法,但是一旦设置白名单的网站多了,手动去还原回来也挺麻烦的。

索性在网上搜了一下,如何使用web.config文件实现IP白名单。

方法是有的,在configuration节点中添加如下节点

1
2
3
4
5
6
7
8
<system.webServer>
<security>
<ipSecurity allowUnlisted="false">
<clear/>
<add ipAddress="127.0.0.1" allowed="true"/>
</ipSecurity>
</security>
</system.webServer>

加了这段代码之后,报错

This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (overrideModeDefault=”Deny”), or set explicitly by a location tag with overrideMode=”Deny” or the legacy allowOverride=”false”.

错误代码为0x80070021。网上的解决方法有很多,最多的说法是要修改applicationHost.config文件,将

1
<section name="IpSecurity" overrideModeDefault="Deny"

修改为

1
<section name="IpSecurity" overrideModeDefault="Allow"

我用everything搜索applicationHost.config文件,发现有好多,主要修改了%windir%\system32\inetsrv\config\applicationHost.config、%windir%\SysWOW64\inetsrv\Config\applicationHost.config、项目目录下.vs\config\applicationHost.config这几个我都有改,但是依然没有用。

另一个说法是,在system.webServer标签外再加一个标签

1
2
3
4
5
<location path="Your WebSite Name">
<system.webServer>
...
</system.webServer>
</location>

虽然这么做确实不报错了,但是白名单完全不起效果。

很郁闷,真的是尝试了很多方法都不管用,直到我尝试了这篇文章的方法。

文章说之所以报错0x80070021,是因为文件的一部分被另一个进程给锁了,当前进程无法访问该文件,原文是这么说的

Reason:

ERROR CODE: 0x80070021 is

ERROR_LOCK_VIOLATION The process cannot access the file because another process has locked a portion of the file.

解决方法,需要使用appcmd.exe程序

Solution:

There are usually a few more lines in that error response that points to the exact line in the config file (and hence the locked section) that has the problem. You will either have to unlock that section or not use it in your application’s web.config file.

For e.g., one can lock/unlock handlers/modules sections by either

Ø use appcmd.exe

%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers

%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/modules

我执行了命令

1
%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/security/ipSecurity

之后,提示

在配置路径“MACHINE/WEBROOT/APPHOST”解除了“system.webServer/security/ipSecurity”节的锁定。

这一次,终于成功了 T T,泪流满面。目测是因为system.webServer/security/ipSecurity节点被另一个进程锁定了导致web.config文件无法使用,所以必须先释放被锁的节点。

再次打开IIS管理器里的IP地址和域限制,会发现在web.config里进行的设置,其实已经在里面得到了修改。

致不轻易放弃的自己。

avatar

chilihotpot

You Are The JavaScript In My HTML