Cloudflare检测HTTP返回代码宕机切换IP脚本教程-技术论坛-官方板块-主机吧

Cloudflare检测HTTP返回代码宕机切换IP脚本教程

国内除了DNSPOD其他商家宕机切换都是收费功能,但是DNSPOD检测时间最短10分钟,大大折扣,可以把把 DNS 解析换到Cloudflare,通过 Shell 脚本达到宕机切换的功能。

介绍

通过检测 HTTP 返回代码小于 307,不做 IP 切换;

通过检测 HTTP 返回代码大于 307,切换备用 IP;

当主站 IP 恢复,检测 HTTP 返回代码小于 307,切换主站 IP;

教程

获取 CF 的 ID

curl -X GET "https://api.cloudflare.com/client/v4/zones/这里填你官网的 Zone ID/dns_records" \
     -H "X-Auth-Email: 这里填你登录的 EMAIL 例如:xxx@gmail.com" \
     -H "X-Auth-Key: 这里填你的 API Keys 例如:c9a3a22e788cafcd827b78e1e8dfa7f22b370" \
     -H "Content-Type: application/json"

这里注意下,每个子域名获取的 id 都是不一样的

Cloudflare检测HTTP返回代码宕机切换IP脚本教程-主机吧

新建脚本 status.sh 把两个 ID 分别填写正确的位置

#!/bin/bash
# author: zhujiba
# website: https://www.zhujiba.cc
 
# 获取 CF 的 ID
# curl -X GET "https://api.cloudflare.com/client/v4/zones/这里填你官网的 Zone ID/dns_records" \
#     -H "X-Auth-Email: 这里填你登录的 EMAIL 例如:xxx@gmail.com" \
#     -H "X-Auth-Key: 这里填你的 API Keys 例如:c9a3a22e788cafcd827b78e1e8dfa7f22b370" \
#     -H "Content-Type: application/json" 
 
CheckURL="https://www.yunloc.com"
 
if [ ! -f "status.txt" ];then
echo "" > status.txt
else
status=$(cat status.txt)
fi
STATUS_CODE=$(curl -o /dev/null -m 10 --connect-timeout 10 -s -w %{http_code} $CheckURL)
echo "当前返回代码:$STATUS_CODE"
if [[ $STATUS_CODE <307 ]] && [[ $status -eq 1 ]] 
then
cResult=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/这里填你获取的 Zone id/dns_records/这里填你获取的 ID" \
     -H "X-Auth-Email: 这里填你登录的 EMAIL 例如:xxx@gmail.com" \
     -H "X-Auth-Key: 这里填你的 API Keys 例如:c9a3a22e788cafcd827b78e1e8dfa7f22b370" \
     -H "Content-Type: application/json" \
   --data '{"type":"A","name":"www.zhujiba.org","content":"127.0.0.1","proxiable":true,"proxied":false,"ttl":1}')
echo $cResult
echo "返回代码低于 307,返回原站 IP。"
echo 0 > status.txt
elif [[ $STATUS_CODE <307 ]]
then
echo "返回代码低于 307,不做任何改变!"
exit
else
cResult=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/这里填你获取的 Zone id/dns_records/这里填你获取的 ID" \
     -H "X-Auth-Email: 这里填你登录的 EMAIL 例如:xxx@gmail.com" \
     -H "X-Auth-Key: 这里填你的 API Keys 例如:c9a3a22e788cafcd827b78e1e8dfa7f22b370" \
     -H "Content-Type: application/json" \
   --data '{"type":"A","name":"www.zhujiba.org","content":"127.0.0.2","proxiable":true,"proxied":false,"ttl":1}')
echo $cResult
echo "返回代码高于 307,更改备用 IP 记录。"
echo 1 > status.txt
fi

设置定时任务,每 10 分钟检查一次:

设置定时任务,每 10 分钟检查一次:

脚本可以放在任何机器上定时运行,最好不要放在网站同服务器,不然服务器挂了就不能切换了。

如果需要宕机切换 IP,可以参考 502 重启脚本,检测代码为 000 是就代表宕机了:

#!/bin/bash

CheckURL="https://www.zhujiba.cc"
# curl -I -m 10 -o /dev/null -s -w %{http_code} https://www.zhujiba.cc
STATUS_CODE=`curl -o /dev/null -m 10 --connect-timeout 10 -s -w %{http_code} $CheckURL`
#echo "$CheckURL Status Code:\t$STATUS_CODE"
if [ "$STATUS_CODE" = "502" ]; then
    /etc/init.d/php-fpm restart
fi

再来个支持华为云DNS的项目,自己研究。

GitHub – BlueSkyXN/DNS-AUTO-Switch: 自动检测服务器故障,并自动使用API修改并切换DNS解析,支持华为云DNS和CloudFlareDNS,支持TG·telegram机器人推送

请登录后发表评论

    没有回复内容