在管理网站的过程中,最常见、最让人困惑的情况之一,就是访问域名时出现403 Forbidden 或 404 Not Found。许多站长第一时间会怀疑“是不是域名解析有问题”,但真正的原因往往并不在 DNS,而是在服务器、站点配置甚至权限设置上。要想快速恢复访问、避免长时间宕机,就必须搞清楚:出现 403 或 404 时,到底是 DNS 解析导致,还是服务器配置错误?
为什么403、404经常被误认为解析问题?一旦出现 403、404,大多数人会认为“网站打不开 = 域名解析错误”。但其实 DNS 的功能只是 将域名解析成正确的 IP 地址,它并不会判断你能否访问页面,也无法返回 403 或 404。
换句话说:DNS错误会导致域名无法访问或无法连接服务器;403/404是服务器返回的 HTTP 状态码。这意味着如果你已经看到403 或 404,DNS通常是正常的。
那么DNS出问题时会是什么表现?
DNS 解析异常通常表现为:
- 无法访问域名,提示 Server not found / DNS_PROBE_FINISHED_NXDOMAIN
- ping 域名完全不返回 IP
- dig 查询不到 A 记录
- 浏览器直接提示 “无法连接服务器”
典型提示如:
DNS address could not be found.
或:
Non-existent domain
注意:DNS 不会返回 403 或 404。所以只要看到 403/404,就可以把 DNS 排除掉 80%。
如何判断403/404是服务器问题还是站点配置问题?
一、访问显示403?重点检查权限与服务器策略
403 Forbidden 的含义是服务器拒绝访问这个资源。这通常与权限、目录访问策略相关。
常见 403 原因:
1. 网站根目录权限不正确
例如 apache 或 nginx 没有权限读取目录文件。
Linux 中可以检查目录权限:
ls -l /var/www/html
如果所有者不正确,可尝试修改:
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
(不同系统用户可能是 nginx、httpd、www)
2. Nginx、Apache 配置禁止访问目录
例如 Nginx:
location / {
deny all;
}
或未设置 index 页面:
index index.php index.html;
没有 index 文件时也会触发 403。
3. 使用了防火墙、WAF 拒绝请求
例如:
- 防火墙规则阻止访问
- 服务器内部防火墙过滤 UA、IP 或 Referer
- 地区访问被拒绝(常见于日本服务器)
可以通过暂时关闭 WAF 测试。
4. 伪静态或路径权限错误
例如 WordPress 缺少 .htaccess:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
缺少规则也可能导致访问被阻。
二、访问显示404?重点检查URL路由、文件与伪静态
404 Not Found 的含义是:服务器收到请求,但找不到对应文件或路由。DNS不会导致文件找不到,这一定是服务器层面的错误。
常见 404 原因:
1. 文件不存在或路径错误
例如访问:
https://example.com/about.html
但文件实际在:
/var/www/html/pages/about.html
路径不一致自然 404。
2. 网站目录根路径配置错误
Nginx 示例:
root /var/www/html/public;
如果项目实际入口不是 public,就可能导致所有路径 404。
3. 伪静态配置错误
例如 Laravel、ThinkPHP、WordPress 等框架依靠 rewrite 规则:
Nginx 示例:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
缺少规则会导致所有路由 404。
4. 程序内部路由错误(后端框架)
框架常出现:控制器缺失、路由未注册、API 版本路径不一致
例如 PHP 程序中路径大小写不一致,也容易触发 404。
实战排查:怎样一步一步判断到底是DNS还是服务器导致的?
第一步:用 dig 或 nslookup 确认 DNS 是否正常
dig yourdomain.com
如能返回 IP,DNS 正常。
第二步:ping 域名确认是否解析到服务器
ping yourdomain.com
如果 ping 结果显示 IP,但网站报 403/404,则 DNS 100% 正常。
第三步:用 curl 判断服务器返回的状态码
curl -I https://yourdomain.com
输出示例:
HTTP/1.1 403 Forbidden
或:
HTTP/1.1 404 Not Found
依然说明服务器收到请求了,DNS 没问题。
第四步:直接访问服务器 IP
用浏览器访问:
http://服务器IP/
可能结果:
1. IP 访问也 403/404
→ 服务器配置错误(根目录、权限、虚拟主机配置)
2. IP 访问正常,但域名访问 403/404
→ 域名绑定不正确(Nginx server_name 设置错误)
例如:
server {
server_name example.com www.example.com;
root /var/www/html;
}
如果 server_name 没匹配到域名,会走默认站点导致 404。
第五步:查看服务器错误日志
最关键的步骤!
Nginx 错误日志:
/var/log/nginx/error.log
Apache 错误日志:
/var/log/apache2/error.log
日志几乎能直接告诉你原因,比如:
- 权限不足 → Permission denied
- 文件不存在 → No such file or directory
- 路由错误 → rewrite failed
当域名访问出现 403 Forbidden 或 404 Not Found 时,绝大部分情况与 DNS 无关。这两个状态码都是服务器返回的,它们意味着浏览器已经成功连接到服务器。
判断是否为 DNS 问题的最核心原则:能看到 403/404 = DNS 正常;DNS 异常 = 域名无法访问、无法解析 IP
要解决问题,应重点排查网站根目录配置、文件是否存在、伪静态规则、权限设置、server_name 域名绑定、程序路由或内部路径,只要按本文提供的诊断流程逐步排查,几乎能 100% 找到原因。
CN
EN