Zxilly
Try to be 1%
Zxilly's Blog

使用 Caddy 反代 ghcr.io

背景

由于众所周知的原因,中国大陆经常会遇到一些网络连通性问题。我们今天遇到的问题是在中国大陆服务器上, Docker 拉取托管于 ghcr.ioImage 极端缓慢。

原理及方案

Docker 的通信协议基于标准 http,可以通过反代并替换对应的字符串来完成劫持对应的 manifest 文件。

配置文件

因为是在新服务器上配置,所以选择了易于配置的 Caddy

ghcr.io 选择将 APIImage 二进制文件 在不同的服务器上提供,通过 HTTP 307 从 API 跳转到文件服务器,因此我们也对应需要配置两个 vhost,可以被部署在不同的服务器上。

警告
这个配置文件依赖 ueffel/caddy-brotlicaddyserver/replace-response,请使用 caddy 自行编译。

Caddyfile (API-server)

ghcr.example.com {
    encode br gzip
    log {
        output stdout
    }
    reverse_proxy {
        to https://ghcr.io
        header_up Host ghcr.io
        header_down Location pkg-containers.githubusercontent.com pkg.example.com
    }
    replace {
        ghcr.io ghcr.example.com
    }
}

Caddyfile (Binary Server)

pkg.example.com {
    reverse_proxy {
        to https://pkg-containers.githubusercontent.com
        header_up Host pkg-containers.githubusercontent.com
    }
}

使用

ghcr.io 的镜像对应替换为 ghcr.example.com,即可正常 pull

样例

docker pull ghcr.io/zxilly/yearmaps:latest
# to
docker pull ghcr.example.com/zxilly/yearmaps:latest

Zxilly

文章作者

发表评论

textsms
account_circle
email

Zxilly's Blog

使用 Caddy 反代 ghcr.io
由于众所周知的原因,中国大陆经常会遇到一些网络连通性问题。
扫描二维码继续阅读
2022-04-27