域名解析成功但访问报错,问题在nginx路由逻辑:先查server_name是否生效(严格区分大小写和末尾点)、再查配置是否被正确加载(nginx -t测试、include路径、冲突文件)、最后排除default_server抢占(如0.default.conf)并用access_log验证实际匹配的server块。

域名解析成功但访问报错(比如显示“Welcome to nginx”、404、403,或根本连不上),说明DNS没问题、网络可达,问题出在Nginx自身路由逻辑上。核心要查两点:请求有没有进到你的站点配置?进了之后有没有被正确匹配和处理?
确认 server_name 是否真实生效
Nginx 不是靠 DNS 解析域名,而是靠 HTTP 请求头里的 Host 字段做匹配。浏览器访问 http://example.com,就会发一个 Host: example.com 的头过去。
- 进 SSH,检查你的站点配置文件是否存在且内容完整:
ls -l /www/server/panel/vhost/nginx/example.com.conf - 确认里面写了正确的
server_name,比如:server_name example.com www.example.com;(多个域名空格分隔) - 执行
grep -r "server_name example.com" /www/server/panel/vhost/nginx/,看是否唯一命中你的配置 - 注意大小写和末尾点号:Nginx 匹配严格区分大小写,
Example.com≠example.com;example.com.(带点)是不同值
检查配置是否被 Nginx 加载
宝塔有时界面显示“创建成功”,但实际没写入配置,或 include 路径写错了,导致你的 conf 文件压根没被读取。
- 查看主配置是否包含正确加载路径:
grep "include.*nginx/.*\.conf" /www/server/nginx/conf/nginx.conf,应看到类似include /www/server/panel/vhost/nginx/*.conf; - 运行
nginx -t测试语法。如果报no matches或提示找不到文件,大概率是 include 路径错误或配置文件为空/权限不对 - 手动检查该目录下是否有其他同名或冲突的 conf 文件(如备份文件、旧版本残留),避免干扰
排除 default_server 抢占流量
当 Nginx 找不到匹配的 server_name,就会把请求交给标记为 default_server 的那个块——而宝塔默认的 0.default.conf 就干这事,它就是“欢迎页”的来源。
- 检查
/www/server/panel/vhost/nginx/0.default.conf是否存在且启用(没被重命名或注释) - 打开你的站点配置,确保
server块里有明确的listen 80;(HTTP)或listen 443 ssl;(HTTPS),不要只写listen 80 default_server;却漏掉协议声明 - 临时测试可重命名
0.default.conf为0.default.conf.bak,再执行nginx -s reload,看是否恢复正常
验证请求实际到达哪个 server 块
最直接的办法是加日志,看 Nginx 怎么路由的:
- 在你站点的
server块里加一行:access_log /www/wwwlogs/example.com.access.log main; - 同时确保
0.default.conf里的 access_log 指向另一个文件(如default.access.log) - 访问域名后,立刻执行:
tail -f /www/wwwlogs/*.log,看请求日志出现在哪个文件里——出现在 default 日志里,说明没匹配上你的配置











