站点图标 高效码农

Ladder代理终极指南:三步攻克付费墙,自建HTTP代理全攻略

一、先回答你最想问的三个问题

问题 一句话答案
Ladder 到底是什么? 一个用 Go 写的轻量级 HTTP 代理,能让你在内网里自建一个“1ft.io/12ft.io”同款付费墙绕行服务。
会不会很难? 不需要写代码,会敲 3 行命令就能跑;Windows、macOS、Linux、Docker 都有现成二进制。
合法吗? 项目只提供技术框架,作者明确声明“仅教育用途”;是否合规取决于你所在地区的法律以及你访问的内容版权。

二、它到底怎么把墙“搬走”?

把大象放进冰箱只要 3 步,Ladder 也是 3 步:

  1. 你在浏览器里输入 http://你的服务器:8080/https://www.xxx.com/article
  2. Ladder 先把请求套一层“搜索引擎爬虫”马甲(Googlebot UA + 66.249.66.1 的 X-Forwarded-For),再去目标站点拿文章。
  3. 拿到 HTML 后,按规则集删掉付费弹窗、改写图片地址、去掉 CORS 限制,再吐回给你。

用一条 mermaid 图说话:

sequenceDiagram
    participant 浏览器
    participant Ladder
    participant 目标站点
    浏览器->>Ladder: GET /https://xxx.com/article
    Ladder->>Ladder: 套爬虫马甲、按规则改请求头
    Ladder->>目标站点: 伪装成 Googlebot 请求
    目标站点->>Ladder: 返回全文 HTML
    Ladder->>Ladder: 删掉 paywall 标签、重写图片地址
    Ladder->>浏览器: 200 OK,干净页面

三、一分钟跑起来(二进制版)

系统 步骤
Windows 1. 打开 releases 页面 下载 ladder_windows_amd64.exe
2. 双击运行,黑框里出现 Listening on :8080 即可。
3. 浏览器访问 http://localhost:8080 把想看的文章地址粘进去。
macOS 1. 下载 ladder_darwin_arm64(M1/M2)或 amd64(Intel)。
2. chmod +x ladder 给权限,再 ./ladder 启动。
3. 同上。
Linux 1. wget https://github.com/everywall/ladder/releases/latest/download/ladder_linux_amd64
2. chmod +x ladder && ./ladder
3. 如果想后台跑:nohup ./ladder &

第一次启动默认端口 8080,没任何认证,仅限本机。一旦要让同事或外网访问,务必先加 Basic Auth,方法见第六节。


四、Docker 党:一条命令就上线

docker run -d \
  -p 8080:8080 \
  -e RULESET=https://t.ly/14PSf \
  --name ladder \
  ghcr.io/everywall/ladder:latest

想升级时:

docker pull ghcr.io/everywall/ladder:latest
docker stop ladder && docker rm ladder
# 再跑一遍上面那条 run 命令

五、Docker Compose:把配置写进文件,下次不敲字

把下面内容保存为 docker-compose.yaml

version: "3.9"
services:
  ladder:
    image: ghcr.io/everywall/ladder:latest
    ports:
      - "8080:8080"
    environment:
      USERPASS: "admin:123456"      # 先给 Basic Auth,别偷懒
      RULESET: "https://raw.githubusercontent.com/everywall/ladder-rules/main/ruleset.yaml"
      LOG_URLS: "true"
    restart: unless-stopped

然后:

docker compose up -d

六、公开部署前,务必做的 3 件小事

事项 为什么
1. 加 Basic Auth 作者警告:不加密=任何人都能用你的代理浏览非法内容,后果你背。
2. 改默认端口 8080 是扫描器最爱,换成 8888/9000 之类减少骚扰。
3. 配防火墙 云服务器安全组只放 80/443 给反向代理,ladder 监听 127.0.0.1:8888,再由 Nginx 转发。

七、配置清单:所有环境变量中文速查表

变量名 默认值 干嘛的 示例
PORT 8080 监听端口 8888
PREFORK false 是否多进程,低配机别开 true
USER_AGENT Googlebot 2.1 伪装成谁去要网页 Mozilla/5.0 (Windows NT 10.0; Win64; x64) …
X_FORWARDED_FOR 66.249.66.1 伪装的爬虫 IP 留空即不发
USERPASS Basic Auth 账号密码 admin:StrongPass
LOG_URLS true 是否打印访问了哪些 URL false 就安静
DISABLE_FORM false 把首页那个输入框关掉 true
FORM_PATH 用自己写的漂亮首页 /opt/ladder/form.html
RULESET 官方规则 规则文件路径或 URL /opt/ladder/rules.yaml
EXPOSE_RULESET true 是否让别人的 ladder 拉取你的规则 false
ALLOWED_DOMAINS 只允许代理这些站,逗号分隔 nytimes.com,washingtonpost.com
ALLOWED_DOMAINS_RULESET false 是否把规则里出现的域名自动加入白名单 true

八、规则集:让代理“长眼睛”

规则集就是一份 YAML,告诉 ladder “遇到某站,这么改”。核心能力 4 样:

  1. 改请求头(headers)
  2. 改返回头(同样 headers 字段)
  3. 用正则改 HTML(regexRules)
  4. 往页面里塞代码(injections)

最小可运行示例:把 example.com 里所有本地脚本地址补全域名,再清掉本地存储。

- domain: example.com
  headers:
    user-agent: Mozilla/5.0 (Googlebot 2.1)
  regexRules:
    - match: <script\s+([^>]*\s+)?src="(/)([^"]*)"
      replace: <script $1 src="https://www.example.com/$3"
  injections:
    - position: head
      append: |
        <script>
          window.localStorage.clear();
          console.log('paywall removed by ladder');
        </script>

九、实战:给纽约时报写一条“去软墙”规则

仅示范技术思路,是否可行随对方策略变动。

- domain: nytimes.com
  headers:
    referer: https://www.google.com/
  regexRules:
    - match: <div[^>]*class="[^"]*css-paywall[^"]*"[^>]*>
      replace: <div style="display:none">
  injections:
    - position: head
      prepend: |
        <style>
          .css-paywall { display:none !important; }
        </style>

把这段保存成 nyt.yaml,本地启动时:

./ladder -r ./nyt.yaml

十、API 模式:把梯子当“纯后端”

前端或脚本里直接调:

# 拿完整 HTML
curl http://localhost:8080/api/https://www.example.com/article

# 只要源码,不注入任何脚本
curl http://localhost:8080/raw/https://www.example.com/article

返回就是 UTF-8 纯 HTML,可在 Python、Node、浏览器插件里二次处理。


十一、常见报错 FAQ

现象 最可能原因 排查
页面只有文字,图片裂图 对方用了 JS 懒加载 在规则里把 data-src 换成 src,或改用 Google Cache 模式
502 Bad Gateway 目标站反爬,直接拒绝 Googlebot 换 USER_AGENT 为普通桌面浏览器
启动提示 “ruleset yaml unmarshal error” YAML 缩进不对 在线 YAML 校验器过一遍
docker logs 里一直 “permission denied” 挂载了本地 rules.yaml,但容器里没权限 给文件 644 权限,或把 SELinux 设宽松

十二、升级与回滚

  1. 二进制:旧文件重命名 ladder.bak,下载新版,重启进程。
  2. Docker:docker pull … 后重新 run,旧镜像自动变 dangling,回滚只需 docker tag 切回去。
  3. 规则集:ladder 启动时一次性读入,改完规则必须重启进程;生产环境建议先测本地,再 CI 推送。

十三、开发者视角:本地源码跑起来

前提:Go 1.20+、pnpm(可选,仅改样式才用)

git clone https://github.com/everywall/ladder.git
cd ladder
echo "dev" > handlers/VERSION
RULESET="./ruleset.yaml" go run cmd/main.go

改 Tailwind 样式:

pnpm install
pnpm build   # 生成 dist/output.css

十四、 Helm 部署:K8s 集群一条命令

helm repo add ladder https://everywall.github.io/ladder
helm install myladder ladder/ladder \
  --set userpass=admin:123456 \
  --set service.type=ClusterIP

具体值文件见项目内 /helm-chart 目录,支持 Ingress、持久化规则、资源限制等。


十五、写在最后的提醒

  1. 任何付费内容都有版权,技术中立,使用自担风险。
  2. 公开节点务必加 Basic Auth + 防火墙,否则流量与法律风险都指向你。
  3. 规则集随目标站点改版会失效,需定期维护;欢迎把通用规则提 PR 到官方规则仓库,让更多人受益。

祝你阅读自由,也别忘了支持优质内容生产者。

退出移动版