如何检测WordPress站点故障并自动跳转至备用站点
嘿,很高兴能帮到你——毕竟第一次在Stack Overflow提问肯定有点忐忑😉。针对你的需求,我整理了几个在WordPress环境下可行的方案,你可以根据自己的技术能力和服务器环境来选:
方案1:服务器层面(Nginx)自动跳转(最可靠)
如果你的站点用的是Nginx,这是最稳妥的方案——毕竟要是WordPress彻底挂了(比如PHP崩了、数据库连不上),WordPress内部的代码根本跑不起来,服务器层面的配置能直接接管请求。
步骤很简单,修改你的Nginx虚拟主机配置:
upstream wordpress_backend { server www.first-domain.ro; server www.second-domain.ro backup; # 把备用站标记为备份节点 } server { listen 80; server_name www.first-domain.ro; # 配置健康检查,超时5秒没响应就判定主站故障 location /health-check { access_log off; proxy_pass http://wordpress_backend; proxy_connect_timeout 5s; proxy_read_timeout 5s; proxy_send_timeout 5s; } # 把所有用户请求转发到后端集群 location / { proxy_pass http://wordpress_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
修改完后重启Nginx,它就会优先尝试访问主站,一旦主站在5秒内没响应,就自动切换到备用站。你也可以把/health-check换成WordPress的首页路径,直接检查站点核心是否正常。
方案2:Apache服务器层面跳转
要是你的站点用的是Apache,也能实现类似功能,不过得先确保mod_proxy和mod_proxy_balancer这两个模块已经启用。然后修改Apache的虚拟主机配置:
<Proxy balancer://wordpress_cluster> BalancerMember http://www.first-domain.ro BalancerMember http://www.second-domain.ro status=+H # H标记为备用节点 </Proxy> <VirtualHost *:80> ServerName www.first-domain.ro ProxyPass / balancer://wordpress_cluster/ ProxyPassReverse / balancer://wordpress_cluster/ # 可选:配置健康检查路径 <Location /health-check> ProxyPass balancer://wordpress_cluster/health-check ProxyPassReverse balancer://wordpress_cluster/health-check </Location> </VirtualHost>
保存配置后重启Apache,它会优先请求主站,只有当主站不可用时才会切换到备用站。
方案3:WordPress内部跳转(适合PHP仍能运行的场景)
如果主站只是部分故障(比如某个插件导致前端白屏,但PHP还能正常执行),可以在主题的functions.php里加一段代码来实现跳转:
add_action('init', 'check_main_site_health_and_redirect'); function check_main_site_health_and_redirect() { // 检查主站首页是否能正常返回200状态码 $main_site_url = home_url(); $response = wp_remote_get($main_site_url, array('timeout' => 5)); // 如果请求失败或者状态码不对,就跳转到备用站 if (is_wp_error($response) || wp_remote_retrieve_response_code($response) != 200) { wp_redirect('https://www.second-domain.ro', 302); exit; } }
⚠️ 注意:这个方案有局限性——要是WordPress彻底崩溃(比如PHP解析错误、数据库连接失败),这段代码根本不会执行,所以只能作为服务器层面方案的补充。
最后给你几个小提示:
- 优先选服务器层面的方案,可靠性最高,不受WordPress本身故障的影响。
- 测试的时候,可以故意停掉主站的PHP服务或者数据库,看看是否能自动跳转到备用站。
- 如果你用的是托管主机,没有权限修改服务器配置,可以联系主机服务商问问他们是否支持健康检查和自动切换的功能。
内容的提问来源于stack exchange,提问作者Cristian Lodor
相关产品推荐
相关产品推荐

