You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Nginx配置多子域名时出现DNS_PROBE_FINISHED_NXDOMAIN错误求助

问题背景与故障现象

我们的研究项目基于Ubuntu 20.04 LTS虚拟机,计划通过Nginx在不同子域名部署多类服务:

  • 主域名重定向至大学托管的项目信息站
  • subdomain1.maindomain 已部署Nextcloud服务,运行正常
  • subdomain2.maindomain 计划部署Nginx代理+Gunicorn的Django应用,目前先测试静态页面部署
  • subdomain3.maindomain 计划部署Nginx代理+Express.js应用

已完成的正常配置:

  1. 在德国域名服务商Strato为主域名添加了指向服务器IP的A记录
  2. 主域名Nginx重定向配置(运行正常):
server {
        listen 80;
        listen [::]:80;

        listen 443      ssl http2;
        listen [::]:443 ssl http2;
        root /var/www/html;

        server_name maindomain;
        return 301 https://university-site;

        ssl_certificate /etc/ssl/wildcard.crt;
        ssl_certificate_key /etc/ssl/wildcard.key;
        ssl_trusted_certificate /etc/ssl/wildcard.crt;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
}
  1. subdomain1.maindomain的Nextcloud Nginx配置(运行正常):
server {
        listen 80;
        #listen [::]:80;
        server_name subdomain1.maindomain;
        return 301 https://$server_name$request_uri;
}

server {
        listen 443      ssl http2;
        listen [::]:443 ssl http2;
        root /var/www/nextcloud;
        index index.html index.php /index.php$request_uri;
        server_name subdomain1.maindomain;

        ssl_certificate /etc/ssl/wildcard.crt;
        ssl_certificate_key /etc/ssl/wildcard.key;
        ssl_trusted_certificate /etc/ssl/wildcard.crt;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;

... lot's of nextcloud related stuff ...
}

故障现象

部署subdomain2.maindomain时,复制subdomain1的配置修改后,配置内容如下:

server {
        listen 80;
        server_name subdomain2.maindomain;
        root /var/www/subdomain2;
        index index.html index.php /index.php$request_uri;
        # return 301 https://$server_name$request_uri;
}

添加静态文件到/var/www/subdomain2并重启Nginx后,访问http://subdomain2.maindomain出现DNS_PROBE_FINISHED_NXDOMAIN错误。后续测试将服务器IP加入server_name后,直接访问IP可正常显示静态页面,但访问子域名仍报错。

排查与解决步骤

1. 确认子域名DNS记录配置

DNS_PROBE_FINISHED_NXDOMAIN本质是DNS服务器无法解析该子域名,优先检查DNS记录:

  • 登录Strato域名管理后台,确认已添加subdomain2.maindomain的A记录,指向服务器公网IP;若使用通配符域名记录(如*.maindomain),需确认该记录存在且生效
  • 检查记录类型:确保是A记录(IPv4)或AAAA记录(IPv6,若服务器支持),而非CNAME或其他类型
  • 确认记录未设置错误的TTL值,若TTL过大,可能导致解析缓存未更新

2. 验证DNS解析有效性

在本地或服务器上通过命令行验证解析:

  • 本地终端执行:nslookup subdomain2.maindomain 或 dig subdomain2.maindomain,查看返回的IP是否为服务器IP;若返回NXDOMAIN,说明DNS记录未生效或配置错误
  • 服务器本地执行:dig @localhost subdomain2.maindomain(检查本地DNS缓存),或dig @strato-dns-server-ip subdomain2.maindomain(直接查询Strato的DNS服务器,确认记录已同步)
  • 若本地解析异常,可尝试清空本地DNS缓存:Windows执行ipconfig /flushdns,Linux执行systemd-resolve --flush-caches,macOS执行sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

3. 检查Nginx配置正确性

虽然直接访问IP正常,但仍需确认子域名配置是否生效:

  • 执行nginx -t检查配置文件语法,确保无报错
  • 执行nginx -s reload重新加载配置(避免重启导致服务中断)
  • 查看Nginx访问日志(默认路径/var/log/nginx/access.log)和错误日志(/var/log/nginx/error.log),确认是否有subdomain2.maindomain的请求记录;若日志中无该子域名的请求,说明DNS解析未到达服务器,问题仍在DNS层面
  • 确认subdomain2的配置文件已软链接到/etc/nginx/sites-enabled/目录(Nginx仅加载该目录下的配置),可执行ls -l /etc/nginx/sites-enabled/查看

4. 排查网络与防火墙限制

  • 确认服务器防火墙(如UFW)允许80/443端口的入站流量,执行ufw status查看规则
  • 检查云服务商(若有)的安全组配置,确保80/443端口对外开放
  • 尝试使用不同网络环境(如手机热点)访问子域名,排除本地网络DNS污染或缓存问题

5. 通配符证书与HTTPS配置(可选)

后续部署HTTPS时,需确保当前的通配符证书wildcard.crt支持subdomain2.maindomain,可执行openssl x509 -in /etc/ssl/wildcard.crt -text -noout | grep DNS查看证书包含的域名列表


内容的提问来源于stack exchange,提问作者Stefan Boehringer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:06:33