使用Nginx配置多子域名时出现DNS_PROBE_FINISHED_NXDOMAIN错误求助
问题背景与故障现象
我们的研究项目基于Ubuntu 20.04 LTS虚拟机,计划通过Nginx在不同子域名部署多类服务:
- 主域名重定向至大学托管的项目信息站
subdomain1.maindomain已部署Nextcloud服务,运行正常subdomain2.maindomain计划部署Nginx代理+Gunicorn的Django应用,目前先测试静态页面部署subdomain3.maindomain计划部署Nginx代理+Express.js应用
已完成的正常配置:
- 在德国域名服务商Strato为主域名添加了指向服务器IP的A记录
- 主域名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; }
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
相关产品推荐
相关产品推荐

