经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Nginx » 查看文章
使用nginx搭建creates.io镜像
来源:cnblogs  作者:Skyer119  时间:2023/12/26 9:50:25  对本文有异议

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镜像相关的配置项

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

一、缓存creates.io

  1. server {
  2. listen 7011;
  3. location / {
  4. proxy_pass https://crates.io;
  5. proxy_ssl_server_name on;
  6. proxy_buffering on;
  7. proxy_cache STATIC;
  8. proxy_cache_valid 301 302 307 308 72h;
  9. proxy_cache_valid any 10s;
  10. proxy_cache_revalidate on;
  11. proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
  12. proxy_redirect https://static.crates.io/ http://$host:7012/;
  13. }
  14. }

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

二、缓存static.crates.io

  1. server {
  2. listen 7012;
  3. location / {
  4. proxy_pass https://static.crates.io;
  5. proxy_ssl_server_name on;
  6. proxy_buffering on;
  7. proxy_cache STATIC;
  8. proxy_cache_valid 200 72h;
  9. proxy_cache_valid 400 502 504 10s;
  10. proxy_cache_valid any 1m;
  11. proxy_cache_revalidate on;
  12. proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
  13. }
  14. }

此处,我们将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到本地

  1. cd /home/ # 此处将索引clone到/home目录下
  2. 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地址。

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

最后依然是nginx配置:

  1. server {
  2. listen 7010;
  3. location /crates.io-index/ {
  4. root /home;
  5. }
  6. }

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

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

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

Linux/Unix系统为 $HOME/.carog/config.toml
Windows系统为 $USERPROFILE/.carog/config.toml
内容为:

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

五、写在最后

目前能够找到的搭建creates.io镜像源的文章,全部都是使用基于git over https的传统方式,本篇文章则是采用最新的sparse稀疏索引方式,大幅加快获取包的速度,搭建过程更加便捷。
另外,对于索引的更新,可以通过shell脚本+crontab定时任务来完成自动更新:

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

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

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

添加定时任务:

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

原文链接:https://www.cnblogs.com/Zhou-Tx/p/17926634.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号