
在部署WordPress多站点网络时,用户常遇到子域名无法正常解析或访问的问题。这通常涉及网络设置、dns配置以及WordPress配置等多个环节。以下将针对常见的子域名解析失败场景,提供系统性的排查方案。
问题现象描述
WordPress多站点启用后,尝试访问类似 blog.example.com
的子域名时出现以下情况:
- 浏览器显示“无法找到服务器”或DNS解析超时
- 服务器日志记录“DNS_PROBE_FINISHED_NXDOMAIN”错误
- WordPress后台网络设置中的站点列表不显示新增子域名
DNS解析问题排查步骤
1. 检查DNS记录配置
子域名解析依赖于正确的DNS记录设置。对于WordPress多站点,应确保以下记录存在:
记录类型 | 主机记录 | 记录值 | TTL |
---|---|---|---|
NS记录 | example.com | ns1.example.com ns2.example.com | 3600 |
A记录 | @ | 192.168.1.1 | 3600 |
A记录 | www | 192.168.1.1 | 3600 |
CNAME记录 | wpengine.netdna-cdn.com | cdn.example.com | 3600 |
SOA记录 | example.com | ns1.example.com 1234567890 example.com. hostmaster.example.com. (3600 900 600 86400 7200) | – |
关键点:多站点子域名解析依赖于WordPress配置中的 subdomain
选项值为 true
。可通过以下命令修改:
wp option update siteurl 'http://www.example.com' --network
wp option update home 'http://www.example.com' --network
执行后需等待DNS缓存刷新(建议使用 dig 命令验证)。
2. 验证DNS缓存刷新
当DNS记录修改后,客户端可能仍使用旧缓存。可执行以下命令强制刷新:
sudo systemd-resolve --flush-caches
或Windows系统使用:
ipconfig /flushdns
3. 检查服务器网络配置
对于VPS或云服务器,需确保:
- 服务器防火墙允许DNS查询(UDP/TCP 53端口)
- 反向代理配置正确转发子域名请求
- WordPress网络设置中的
path
参数为空(非子目录模式)
WordPress配置验证
1. 检查网络设置状态
登录WordPress后台,检查以下设置是否正确:
/
网络设置配置示例
/
define( 'WP_ALLOW_MULTISITE', true );
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', true ); // 子域名模式
define( 'DOMAIN_CURRENT_SITE', 'example.com' );
define( 'PATH_CURRENT_SITE', '' ); // 空字符串表示非子目录模式
define( 'MAIN站点地址', 'http://www.example.com' );
define( 'MAIN站点目录', '' ); // 空字符串表示非子目录模式
注意:上述配置需在 wp-config.php
文件中添加。子域名模式需配置 server_name
在Nginx或Apache的虚拟主机中。
2. 检查子域名生成逻辑
WordPress通过 /wp-admin/network.php
脚本生成子域名。可手动执行以下SQL查询验证数据库状态:
SELECT domain, path FROM wp_blogs WHERE domain LIKE 'blog.example.com' AND path = '/'
预期结果应返回匹配的记录。若为空,则需重新执行网络创建脚本。
3. 检查插件冲突
某些安全插件(如Wordfence)可能拦截子域名请求。可临时禁用所有插件后测试:
wp plugin deactivate --network
服务器配置优化
1. Nginx虚拟主机配置
标准子域名配置示例如下:
server {
listen 80;
server_name blog.example.com www.blog.example.com;
root /var/www/;
index index.php index. index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /.ht {
deny all;
}
}
关键点:确保 server_name
与DNS记录完全一致。
2. Apache虚拟主机配置
Apache配置示例如下:
<VirtualHost :80>
ServerName blog.example.com
ServerAlias www.blog.example.com
DocumentRoot /var/www/
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
<FilesMatch .php$>
SetHandler application/x-httpd-php
</FilesMatch>
</VirtualHost>
进阶排查工具
1. DNS诊断工具
使用以下命令进行端到端诊断:
dig blog.example.com @8.8.8.8
nslookup blog.example.com
traceroute blog.example.com
2. 服务器状态检查
检查Nginx/Apache进程状态:
systemctl status nginx
systemctl status apache2
检查PHP-FPM状态:
systemctl status php7.4-fpm
3. 网络抓包分析
使用tcpdump捕获DNS查询和响应包:
sudo tcpdump -i eth0 -nn -s0 -w capture.pcap udp port 53 and host blog.example.com
分析捕获的pcap文件,检查DNS解析过程。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。