网站服务器报403错误怎么解决办法,Http 403错误原因及解决办法

本文详细介绍了Web服务器返回的403 Forbidden错误,包括IIS中的各种子错误代码,如403.1-403.19。错误通常与权限设置、SSL要求、客户端证书和目录浏览等有关。通过实验演示了错误原因,并提供了相应的解决方法,如检查Handler权限、配置SSL设置、调整目录浏览设置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题介绍

403是Web服务器返回的一种非常常见的错误代码,Http协议中对403错误定义如下,

403 Forbidden

The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information available to the client, the status code 404 (Not Found) can be used instead.

而在IIS中根据具体的功能对403错误通过子错误代码的形式进行了更详细的分类。

IIS 7.0 defines the following HTTP status codes that indicate a more specific cause of a 403 error:

403.1 - Execute access forbidden.

403.2 - Read access forbidden.

403.3 - Write access forbidden.

403.4 - SSL required.

403.5 - SSL 128 required.

403.6 - IP address rejected.

403.7 - Client certificate required.

403.8 - Site access denied.

403.9 - Forbidden: Too many clients are trying to connect to the Web server.

403.10 - Forbidden: Web server is configured to deny Execute access.

403.11 - Forbidden: Password has been changed.

403.12 - Mapper denied access.

403.13 - Client certificate revoked.

403.14 - Directory listing denied.

403.15 - Forbidden: Client access licenses have exceeded limits on the Web server.

403.16 - Client certificate is untrusted or invalid.

403.17 - Client certificate has expired or is not yet valid.

403.18 - Cannot execute requested URL in the current application pool.

403.19 - Cannot execute CGI applications for the client in this application pool.

403.20 - Forbidden: Passport logon failed.

403.21 - Forbidden: Source access denied.

403.22 - Forbidden: Infinite depth is denied.

403.502 - Forbidden: Too many requests from the same client IP; Dynamic IP Restriction limit reached.

这篇文章通过实验来重现一些常见的403错误,希望能够更加形象的演示各种错误发生的原因,并介绍相应问题的解决方法。

[403.1 403.3]

造成403.1 - 403.3的主要原因是由于handler需要的权限受到Handler Mapping中启用的权限的限制。

483922da6b939591167ebe356e42afdb.png

如何查看handler需要的权限?可以通过IIS Manager - Handler Mapping,根据请求的扩展名找到相应的Handler,比如我们请求.asp文件的时候报错403.3,找到处理.asp文件的handler为ASPClassic这个handler,双击打开这个handler的Script Map - Request Restrictions - Access,可以查看该handler需要的权限。在这里为了重现403.3问题,我将需要权限设置为write。

c63c33943cce0847b58ea3c7f37233ac.png

如何查看Handler Mapping启用的权限?可以通过IIS Manager - Configuration Editor打开system.webServer/handlers@accesspolicy配置节点如下,可以看到Write选项没有被选中,所以在访问asp页面的时候会出现403.3错误。另外在handler mapping中也可以看到相应的ASPClassic handler对应的状态为disabled。

f4da5356fb13a3e3007301c10c2678ff.png

403.1, 403.2的错误原因与403.3是一致的,即相应handler需要的的Script或者Read权限没有启用。

[403.4 403.5 403.7]

403.4, 403.5, 403.7均是由于SSL设置造成的,本身大多数时候并非服务器端错误,而是客户端的请求没有满足服务端的要求。例如

403.4是指客户端发送了一个http请求到一个配置了需要SSL的网站

403.5是指客户端发送的请求没有满足服务器对于SSL的加密位数要求

403.7是指客户端没有提供相应的证书

这些配置可以通过服务器端IIS Manager - SSL Setting中来配置,

e0a43032e83fc34d97e0b30e6c1b7b8a.png

但是对于ssl的128位数要求需要通过Configuration Editor来找到system.webServer/security/access@sslFlags来配置

9e0cb5a32017f8dd27b1903a2c70629e.png

对于403.7错误有一个值得注意的地方,服务器如果配置了需要客户端证书,客户端正常情况下会弹出证书选择框来给用户选择用哪个证书发送给服务器。如果客户端在只有一张证书的情况下不会弹选择框而直接发送给服务器。如果遇到了403.7错误,很可能是因为客户端没有找到一个可用的证书。

97a79b7edf1db2c28706ee7146b4ed03.png

这里所谓的可用证书的根据服务器返回的信任列表来定义的,根据SSL协议,服务器会在SSL握手的时候返回一组服务器信任的根证书给客户端,客户端查找是否存在相应的用户证书链接自这些根证书,然后弹出选择框。所以如果这里没有找到客户端证书的话,要先确定客户端是否有相应的证书,如果没有则需要安装,如果证书存在,那么要检查其相应的根证书是否在服务器端的信任列表中。

[403.14]

403.14非常常见,而且原因也很简单,就是目录不允许被浏览。

36b43377d8c6fb8532729bbeb8bc93a6.png

解决方法要根据实际需求来看,

1. 如果客户请求的问题,即浏览了不该浏览的目录,那服务器不需要任何更改

2. 如果浏览的目录期待的结果应该是一个默认网页,很有可能是default document没有配好或者不在目录下

3. 如果需要启用目录浏览,则到IIS Manager到指定的目录 - Directory Browsing - Enable

[403.6 403.8]

这两种错误与服务器配置相关,服务器在ipSecurity配置中阻止了客户端相应的ip或者dns名字。具体的配置为system.webServer/security/ipSecurity

322e38db7629791b02c79c86c8263060.png

以上就是最常见的403错误以及相应的解决方法,如果遇到了一些比较少见的其他错误,可以参考这里查找具体的解决方案。

### 解决 Nginx 返回 403 Forbidden 错误的最佳实践 当遇到 Nginx 返回 `403 Forbidden` 错误时,通常意味着客户端尝试访问的资源被服务器拒绝。以下是常见的原因以及相应的解决方案: #### 常见原因分析 1. **权限不足** 文件或目录的权限设置不当可能导致此错误。确保 Web 根目录及其子文件夹具有适当的读取和执行权限。 2. **GeoIP 过滤规则** 当使用 GeoIP 模块来限制特定地区的访问时,可能会触发 `403 Forbidden` 错误。例如,在配置中存在如下语句: ```nginx if ($geoip2_data_country_code = CN) { return 403; } ``` 此处会阻止来自中国的 IP 地址访问网站[^2]。 3. **恶意请求防护** 使用 `if` 指令可以增强安全性,但也需谨慎应用以免造成不必要的阻拦。过度依赖 `if` 可能会影响性能并引入复杂度[^3]。 4. **路径匹配问题** 不正确的 `location` 匹配模式也可能引发此类状况。应仔细校验 URL 路径定义是否准确无误。 #### 实践建议 - **检查文件权限** 对于 Linux 系统而言,默认情况下 Apache/Nginx 用户通常是 www-data 或 nobody 。因此要确认这些用户的读写权限已授予给目标站点所在的文件夹树结构下所有必要的静态资产(HTML/CSS/JS 图像等)。 - **调整 GeoIP 设置** 若因地理位置而产生的封锁并非预期行为,则应当重新评估地理围栏策略;或者对于合法访客提供例外通道,比如白名单机制。 - **优化条件判断逻辑** 尽量减少对 `if` 的运用频率,转而在更稳定可靠的上下文中实施业务规则控制,如利用 map 指令创建映射表来进行状态转换操作。 - **精确定义 Location Blocks** 准确指定 location blocks 中所涉及的具体 URI ,避免通配符滥用引起意外覆盖其他正常路由。 ```nginx server { listen 80; server_name example.com; root /var/www/html; index index.html; error_page 403 /custom_403.html; location ~* \.(jpg|jpeg|png|gif)$ { allow all; } location /admin/ { auth_basic "Restricted Area"; auth_basic_user_file htpasswd.users; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值