使用nginx搭建creates.io镜像的教程详解

 更新时间:2023年12月26日 08:32:13   作者:Skyer119  
在Rust开发中,经常需要使用Cargo从crates.io下载依赖,而国内几乎没有好用的crates.io镜像,使用本文就来使用使用nginx搭建creates.io镜像吧

在Rust开发中,经常需要使用Cargo从crates.io下载依赖,而国内几乎没有好用的crates.io镜像,大多都只对crates.io-index和crates.io进行了镜像,而最重要的static.crates.io却没有镜像。迫不得已只能自己搭建。众所周知,Cargo下载依赖,实际分为三步:

  • 获取索引(Fetch index)
  • 查询下载路径(Redirect location)
  • 下载资源(*.crate文件)

因此,搭建crates.io镜像也需要分为三个模块:

  • crates.io-index
  • crates.io
  • static.crates.io

零、启用nginx的缓存功能

注:此处均为与搭建creates.io镜像相关的配置项

http {
  # 开启全局缓存,并配置存储路径(/var/lib/crates.io)和大小(32g)
  proxy_cache_path /var/lib/crates.io keys_zone=STATIC:100m levels=1:2 inactive=120h max_size=32g;
}

一、缓存creates.io

server {
  listen 7011;
  location / {
    proxy_pass https://crates.io;
    proxy_ssl_server_name on;
    proxy_buffering on;
    proxy_cache STATIC;
    proxy_cache_valid 301 302 307 308 72h;
    proxy_cache_valid any 10s;
    proxy_cache_revalidate on;
    proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
    proxy_redirect https://static.crates.io/ http://$host:7012/;
  }
}

此处,我们将http://localhost:7011反向代理到https://crates.io,并对结果进行缓存。其中状态码为301,302,307,308的缓存72小时,其余状态码缓存10秒。

二、缓存static.crates.io

server {
  listen 7012;
  location / {
    proxy_pass https://static.crates.io;
    proxy_ssl_server_name on;
    proxy_buffering on;
    proxy_cache STATIC;
    proxy_cache_valid 200 72h;
    proxy_cache_valid 400 502 504 10s;
    proxy_cache_valid any 1m;
    proxy_cache_revalidate on;
    proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
  }
}

此处,我们将http://localhost:7012反向代理到https://static.crates.io,并对结果进行缓存。

需要注意到在 缓存creates.io 部分,proxy_redirect参数,就是将原本重定向目标从https://static.crates.io/修改为http://$host:7012/

三、缓存creates.io-index

在前几步中,我们已经将一个creates.io镜像的内容部分搭建完毕,最后就是索引,众所周知,crates.io是使用git仓库 https://github.com/rust-lang/crates.io-index.git 作为官方索引的,因此我们只需要将这个仓库clone到本地

cd /home/ # 此处将索引clone到/home目录下
git clone https://github.com/rust-lang/crates.io-index.git

然后修改/home/crates.io-index/config.json,将https://crates.io修改为我们刚刚的代理地址http://localhost:7011,除了lo地址也可以用本机的其他ip地址。

sed -i 's+https://crates.io+http://localhost:7011+g' /home/crates.io-index/config.json

最后依然是nginx配置:

server {
  listen 7010;
  location /crates.io-index/ {
    root /home;
  }
}

以上,一个镜像源就配置完成啦~~~

四、在开发环境配置镜像源

修改HOME目录下的.cargo/config.toml文件(也可以是不带后缀名的config文件)如果没有就新建一个。

Linux/Unix系统为 $HOME/.carog/config.toml

Windows系统为 $USERPROFILE/.carog/config.toml

内容为:

[source.crates-io]
replace-with = 'local'
[source.local]
registry = "sparse+http://localhost:7010/crates.io-index/"

五、写在最后

目前能够找到的搭建creates.io镜像源的文章,全部都是使用基于git over https的传统方式,本篇文章则是采用最新的sparse稀疏索引方式,大幅加快获取包的速度,搭建过程更加便捷。

另外,对于索引的更新,可以通过shell脚本+crontab定时任务来完成自动更新:

#!/usr/bin/sh
cd /home/crates.io-index/
git pull

保存为/home/crates.io-index/update-index.sh,并添加执行权限:

chmod 755 /home/crates.io-index/update-index.sh

添加定时任务:

# crontab -e
0 * * * * /home/crates.io-index/update-index.sh > /home/crates.io-index/update-index.log 2>&1 &

到此这篇关于使用nginx搭建creates.io镜像的教程详解的文章就介绍到这了,更多相关nginx搭建creates.io镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux下Nginx负载均衡多个tomcat配置的方法步骤

    Linux下Nginx负载均衡多个tomcat配置的方法步骤

    这篇文章主要介绍了Linux下Nginx负载均衡多个tomcat配置的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • nginx内部访问特性如何实现静态资源授权访问

    nginx内部访问特性如何实现静态资源授权访问

    这篇文章主要介绍了nginx内部访问特性如何实现静态资源授权访问方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • nginx openresty 快速入门指南

    nginx openresty 快速入门指南

    OpenResty是基于Nginx与Lua 的高性能Web平台,其**内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项,**用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关,这篇文章主要介绍了nginx openresty 快速入门指南,需要的朋友可以参考下
    2024-02-02
  • Nginx如何集成到Windows服务

    Nginx如何集成到Windows服务

    文章介绍了如何在Windows 11上将Nginx配置为系统服务,并提供了一个详细的步骤指南,包括下载和配置Winsw工具,以及安装和删除Nginx服务的方法
    2024-12-12
  • Nginx通过用户IP获取所在国家及地理位置的实现方法

    Nginx通过用户IP获取所在国家及地理位置的实现方法

    Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,今天讲解Nginx十分常用的功能之一,通过IP获取用户所在的国家,一般广泛应用在各类需要定位的网站上面,来定位用户首次访问的国家,通过IP解析库GeoLite2-Country来实现功能,需要的朋友可以参考下
    2023-10-10
  • 采用ngxtop实现nginx实时访问数据统计

    采用ngxtop实现nginx实时访问数据统计

    这篇文章主要介绍了采用ngxtop实现nginx实时访问数据统计,需要的朋友可以参考下
    2014-07-07
  • nginx配置访问图片路径以及html静态页面的调取方法

    nginx配置访问图片路径以及html静态页面的调取方法

    这篇文章主要介绍了详解nginx配置访问图片路径以及html静态页面的调取方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。
    2016-12-12
  • Nginx访问静态资源配置的实现步骤

    Nginx访问静态资源配置的实现步骤

    Nginx 擅长于底层服务器端资源的处理,例如静态资源处理转发、反向代理,负载均衡等,本文主要介绍了Nginx访问静态资源配置的实现步骤,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • 利用nginx同一端口部署多个前端的办法(亲测有效版)

    利用nginx同一端口部署多个前端的办法(亲测有效版)

    在Nginx中配置同一个端口支持多个前端应用,通常可以通过不同的路径(location)来映射不同的前端项目,这篇文章主要介绍了利用nginx同一端口部署多个前端的相关资料,需要的朋友可以参考下
    2026-01-01
  • nginx中的路径匹配location规则详解

    nginx中的路径匹配location规则详解

    Nginx的匹配规则用location指令来实现,Nginx 的location指令用于匹配请求的 URI(请求路径),并根据匹配结果执行特定的处理指令,这篇文章主要介绍了nginx中的路径匹配规则详解(location规则),需要的朋友可以参考下
    2025-04-04

最新评论