8 个版本

0.2.2 2024年4月30日
0.2.1 2024年2月19日
0.2.0 2023年8月9日
0.1.4 2023年7月2日
0.1.0 2021年9月22日

#30 in HTTP服务器

Download history 149/week @ 2024-04-28 3/week @ 2024-05-05 4/week @ 2024-06-30

每月下载量542次

MIT/Apache

43KB
714

crates.io 注册表的缓存HTTP代理服务器

简介

crates-io-proxy 实现了对https://index.crates.io/上的稀疏注册表索引和静态crate文件下载服务器的透明缓存。

实现了两个独立的HTTP代理端点

  1. 监听/index/.../{crate}的HTTP GET请求,将其转发到https://index.crates.io/,并将下载的注册表索引条目作为JSON文本文件缓存在本地文件系统中。

  2. 监听/api/v1/crates/{crate}/{version}/download的HTTP GET请求,将其转发到https://crates.io/,并将下载的crate作为.crate文件缓存在本地文件系统中。

后续的稀疏注册表索引和crate下载API调用将使用本地缓存的索引条目和crate文件来服务。

作为一个便利的功能,稀疏索引根目录中找到的.config文件的下载请求将使用一个替换文件提供服务,该文件将crate下载URL更改为指向同一代理服务器。

使用方法

可以使用Cargo的源替换功能来告诉Cargo使用crate注册表镜像。将以下行添加到您的.cargo/config

[source.crates-io]
replace-with = "crates-io-mirror"

[registries.crates-io-mirror]
index = "sparse+http://crates-io-proxy.example.com:3080/index/"

使用静态git索引镜像

crates-io-proxy 也可以作为具有单独基于git的注册表索引的crate文件下载代理服务器使用。

要使用此配置,请从GitHub克隆并重新托管crates.io索引存储库,并将存储库根目录中的"dl"参数更改为指向crates-io-proxy服务器

{
    "dl": "https://crates-io-proxy.example.com:3080/api/v1/crates",
    "api": "https://crates.io"
}

在此配置中,应使用git注册表索引链接

[registries.crates-io-mirror]
index = "https://crates-io-index.example.com/crates-io-index.git"

配置

可以通过命令行选项或环境变量来配置代理服务器。

运行crates-io-proxy --help以获取以下帮助页面

Usage:
    crates-io-proxy [options]

Options:
    -v, --verbose              print more debug info
    -h, --help                 print help and exit
    -V, --version              print version and exit
    -L, --listen ADDRESS:PORT  address and port to listen at (0.0.0.0:3080)
    -U, --upstream-url URL     upstream download URL (https://crates.io/)
    -I, --index-url URL        upstream index URL (https://index.crates.io/)
    -S, --proxy-url URL        this proxy server URL (http://localhost:3080/)
    -C, --cache-dir DIR        proxy cache directory (/var/cache/crates-io-proxy)
    -T, --cache-ttl SECONDS    index cache entry Time-to-Live in seconds (3600)

Environment:
    INDEX_CRATES_IO_URL        same as --index-url option
    CRATES_IO_URL              same as --upstream-url option
    CRATES_IO_PROXY_URL        same as --proxy-url option
    CRATES_IO_PROXY_CACHE_DIR  same as --cache-dir option
    CRATES_IO_PROXY_CACHE_TTL  same as --cache-ttl option

高级配置

默认情况下,crates-io-proxy使用内嵌的TLS受信任根证书。可以通过设置native-certs功能标志,在构建时配置它以使用系统证书存储。

在运行时配置此行为尚不支持。

依赖项

~2.1–9MB
~107K SLoC