固定 IP 代理突然连不上了,不知道是代理挂了你的网络断了还是目标站封了你。本文教你四步排查法,配合 curl 脚本和 cron 持续监控方案,3 分钟定位问题

静态代理四步排查流程:本地网络→代理连通→目标站检测→cron持续监控
图1:静态代理四步排查与持续监控流程。按顺序排除本地网络、代理本身、目标站封禁,最后用 cron 自动化监控。

一、先确认你的网络本身是通的

不要用亚马逊测本地网络——跨境链路不通不等于你的网有问题。用百度来测:

curl -o /dev/null -s -w "%{http_code}\n" --connect-timeout 10 https://www.baidu.com

返回 200 = 网络 OK,返回 000 = 本地掉线或 DNS 没解析。

⚠️ curl 的隐藏坑

curl 默认的 User-Agent 被 AWS WAF 识别为爬虫,返回 503

AWS WAF 还会用 JA3 TLS 指纹识别——原生 curl 基于 OpenSSL,暴露非浏览器特征。

两种替代方案:

  • curl-impersonate:修改底层 TLS 库,用 BoringSSL 模拟 Chrome 指纹
  • Playwright:配合浏览器指纹文件,完整模拟真实浏览器

✅ 你可以立刻做

在终端运行上方 curl 百度命令。返回 200 再往下排查;返回 000 先修本地网络或 DNS,别浪费时间测代理。

二、查代理本身的连通性

用纯文本 IP 查询接口 ifconfig.me(不会被 WAF 拦截):

curl -x http://user:pass@proxy:8080 -s --connect-timeout 5 https://ifconfig.me
现象 原因 处理方式
Could not resolve host 代理域名解析失败 检查 DNS 或代理地址是否正确
Connection refused 代理端口未开启或被防火墙阻止 联系供应商确认端口状态
407 认证失败 检查用户名密码或 IP 白名单

表1:代理连通性常见错误速查

如果返回的 IP 和之前记的不一样——固定 IP 不该换 IP——越早发现损失越小。

✅ 你可以立刻做

用 curl -x 走 ifconfig.me,对照表1 看报错类型。记下当前出口 IP,和供应商承诺的固定 IP 比对——不一致立刻联系客服。

三、排查是不是目标站封了你

目标站返回 403connection refused → 出口 IP 已被标记。

另一种情况:返回 200 但页面内容不是正常业务页(验证码页或空白页)。

不光看状态码,把状态码和响应体大小一次拿到

curl -x http://user:pass@proxy:8080 -s -w "\nHTTP_CODE:%{http_code}\nSIZE:%{size_download}\n" --connect-timeout 10 -o /dev/null https://target-site.com

内容特征断言:检查页面是否含有 captcha / verify 关键词,或检查是否缺失预期的业务标记。

✅ 你可以立刻做

对目标站跑带 -w 的 curl,同时看 HTTP_CODE 和 SIZE。403 换 IP;200 但 SIZE 异常小,打开 /tmp 响应文件搜 captcha 关键词。

四、别等出问题再测,做持续监控

cron 每 30 分钟自动跑一次。完整监控脚本:

#!/bin/bash
# --- 配置区:改成你的代理和目标站 ---
PROXY="http://user:pass@proxy:8080"
TARGET="https://your-target-site.com"
LOG_FILE="/var/log/proxy-check.log"

# 通过代理请求目标站,保存响应体到临时文件
HTTP_CODE=$(curl -x "$PROXY" -s -o /tmp/proxy_response.html -w "%{http_code}" --connect-timeout 15 "$TARGET")
SIZE=$(wc -c < /tmp/proxy_response.html)
# 检查页面是否包含预期业务关键词(改成你目标站的特征词)
CONTENT_CHECK=$(grep -ci "expected_keyword" /tmp/proxy_response.html)

# 写入日志,方便事后排查
echo "[$(date '+%Y-%m-%d %H:%M:%S')] HTTP:$HTTP_CODE SIZE:$SIZE MATCH:$CONTENT_CHECK" >> "$LOG_FILE"

# 任一条件不满足则告警:非 200 / 页面过小 / 关键词缺失
if [ "$HTTP_CODE" != "200" ] || [ "$SIZE" -lt 500 ] || [ "$CONTENT_CHECK" -eq 0 ]; then
    echo "WARNING: Proxy check failed!" >> "$LOG_FILE"
fi

想更进一步?接到 UptimeRobot 设置关键词匹配,页面内容异常时自动告警。

✅ 你可以立刻做

复制脚本到服务器,改 PROXY、TARGET 和 expected_keyword,加 crontab:*/30 * * * * /path/to/script.sh。先手动跑一次确认日志正常写入。

常见问题 FAQ

Q:curl 超时和返回 403 有什么区别?

超时通常是代理连通性或 DNS/端口问题;403说明请求已到达目标站,但 IP 或请求特征被风控拦截。排查路径完全不同。

Q:静态代理监控应该多久跑一次?

生产环境建议每 15–30 分钟 自动检测一次,并检查响应体大小和关键词。关键业务可缩短到 5 分钟,配合 UptimeRobot 关键词告警。

Q:怎么判断是目标站封了我的 IP?

先用本地网络直连目标站确认能访问,再通过代理访问。若本地正常、代理 403,且换 IP 后恢复,基本可判定为目标站封禁该 IP 段或代理出口。

五、3 分钟完成完整检测

008ip.com 把以上四步合并成一次自动诊断,3 分钟即可拿到完整报告。

✅ 你可以立刻做

不想手动跑四步?打开 008ip.com,填入代理地址,一次拿到连通性 + IP 类型 + 目标站可达性的合并报告。

延伸阅读:

📌 核心要点

  • ✓ 先用百度测本地网络,排除自身问题
  • ✓ 用 ifconfig.me 查代理连通性,注意区分 DNS、端口、认证三类错误
  • ✓ 不光看状态码,同时检查响应体大小和内容特征
  • ✓ cron 持续监控 + UptimeRobot 关键词告警,不等出问题才发现