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

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

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

  1. crates.io-index
  2. crates.io
  3. 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稀疏索引方式,大幅加快获取包的速度,搭建过程更加便捷。

使用nginx搭建creates.io镜像(稀疏索引)的更多相关文章

  1. 用Nginx搭建CDN服务器方法-开启Nginx缓存与镜像,自建图片服务器

    利用Nginx的proxy_cache搭建缓存服务器一:编译ngx_cache_purge1.Nginx的Proxy_cache是根据Key值md5哈希存储缓存,支持任意的Key,例如你可以根据”域名 ...

  2. 搭建Harbor私有镜像仓库--v1.5.1

     搭建Harbor私有镜像仓库--v1.5.1 1.介绍 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境 ...

  3. Nginx,Nginx 搭建图片服务器

    Nginx Nginx 概述 反向代理 工作流程 优点 1:保护了真实的web服务器,保证了web服务器的资源安全 2:节约了有限的IP地址资源 3:减少WEB服务器压力,提高响应速度 4:其他优点 ...

  4. 搭建本地Ubuntu 镜像服务器

    一.需求分析 最近公司软件Team 有个需求是这样的:能不能在局域网搭建一个Ubuntu 镜像服务器, 这样作的好处是可以节省Ubuntu某些常用工具的安装时间. 二.部署过程 2.1 测试环境 目前 ...

  5. Nginx 搭建图片服务器

    Nginx 搭建图片服务器 本章内容通过Nginx 和 FTP 搭建图片服务器.在学习本章内容前,请确保您的Linux 系统已经安装了Nginx和Vsftpd. Nginx 安装:http://www ...

  6. Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)

    Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具) 最近因为项目关系,收朋友之托,想制作秀场网站,但是因为之前一直没有涉及到这 ...

  7. 转:Linux下使用Nginx搭建简单图片服务器

    最近经常有人问图片上传怎么做,有哪些方案做比较好,也看到过有关于上传图片的做法,但是都不是最好的,今天再这里简单讲一下Nginx实现上传图片以及图片服务器的大致理念. 如果是个人项目或者企业小项目,仅 ...

  8. 用nginx搭建http/rtmp/hls协议的MP4/FLV流媒体服务器

    前前后后搭建了两三个星期,终于可以告一段落,nginx实在是有点强大.写一篇笔记来记录一下这个过程中的思路和解决方案. 一.搭建nginx平台: 基本是基于http://blog.csdn.net/x ...

  9. CentOS6下基于Nginx搭建mp4/flv流媒体服务器

    CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具) 1.先添加几个RPM下载源 1.1)安装RPMforge的CentOS6源 [roo ...

  10. Nginx 笔记(四)nginx 原理与优化参数配置 与 nginx 搭建高可用集群

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.nginx 原理与优化参数配置 ​ ​ master-workers 的机制的好处 首先,对于每个 ...

随机推荐

  1. QA|4个数据打开了4个页面,怎么实现只打开一个页面?单例模式|网页计算器自动化测试实战

    如下图,代码中4个数据,产生了4个页面,怎么实现只打开一个页面?可使用单例模式 查询得知 单例模式实现有5种方法,参照链接下: https://blog.csdn.net/SixStar_FL/art ...

  2. JSTL fn函数使用总结

    首先,我们要在页面的最上方引用: <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/function ...

  3. c++中的数论知识

    写在开头:word的公式打不上来,只能截图了 一.组合数学 (1) 加法定理与乘法原理 加法原理:做一件事情,完成它可以有n类办法,在第一类办法中有m1种不同的方法,在第二类办法中有m2种不同的方法, ...

  4. Jenkins 忘记密码|密码重置

    I. 当前环境 OS Version : AlmaLinux release 8.8 Jenkins Version : 2.414.1 II. 操作步骤 2.1 修改配置文件 1. SSH 登录服务 ...

  5. Mac上使用Royal TSX快速连接到OCI主机

    问题: 每次使用Royal TSX连接到OCI主机都要交互式输入opc这个用户名,次数多了也蛮烦. 那如何既指定用户名,又想要通过ssh私钥登陆机器呢? 这个需求确实很初级,但也着实困扰过我,因为开始 ...

  6. Three.js中实现一个OBBHelper

    1. 引言 Three.js中,Box3对象指的是AABB式的包围盒,这种包围盒会随物体的旋转而变换大小,精度较差 Three.js中还有OBB对象,这是一种能表现物体主要特征的.不随物体的旋转而变换 ...

  7. Python - 读取CSV文件发现有重复数据,如何清洗以及保存为CSV文件,这里有完整的过程!!!! 片尾有彩蛋

    语言:Python 功能: 1.清洗CSV文件中重复数据. 2.保存为CSV文件 大体流程: 1.首先观察CSV文件中的数据布局格式如何? 2.通过csv包读取数据.并根据规则使用continue,来 ...

  8. ABP中关于Swagger的一些配置

    Abp 集成 Swagger 官方文档, 请参考 Swagger Integration AspNetCore 配置 Swagger, 请参考 Swashbuckle.AspNetCore 本文的项目 ...

  9. linux其他命令(查找,软链接,打包和压缩,软件安装)笔记

    1,查找文件 *  是通配符,代表任意字符,0到多个. find 路径  -name  "*.txt"  : 查找在路径下所有以 .txt 结尾的文件. 2,软链接 (1)将桌面目 ...

  10. oceanbase 标量子查询等价改写(复杂)

    OB一哥们找我优化条SQL,反馈在OceanBase执行时间很慢需要 3184s才能出结果,安排. 原SQL: select M.POLICY_CHARGE_ID as policyChargeId, ...