文件加速代下载服务,github文件代下载

文件加速代下载服务,github文件代下载

还在使用龟速一般的 git clone? 某些文件国内无法访问?部分网站下载速度极慢?

快来试试最新的代下载文件服务吧,服务地址:https://pd.zwc365.com

项目原理

对于一些资源文件,由于其服务器位于海外,下载速度可能很慢。本项目通过服务器进行了数据中转。只要服务器网速足够快,便有加速下载效果

不使用加速功能时,下载一个资源文件的链路是:

本地 <===> 服务器

当使用 Cloudflare 代下载服务时的链路是:

本地 <===> CloudFlare <===> 服务器

当使用本站代下功能,此时链路是:

本地 <===> 我的服务器 <===> 服务器

此时的网速很大程度取决于你与 CloudFlare 或者 本站服务器 之间的连接速度。

对于一些在海外的资源文件,有明显的加速效果

本站服务器代下载运行方式

当使用本站服务器代下载时,其数据连接的方式如下:

  1. 用户请求下载某个文件,提交任务到主节点
  2. 主节点接收到任务后,缓存任务信息并重定向到一个子节点
  3. 用户连接到这个子节点,请求下载这个任务
  4. 子节点向主节点发起校验任务的请求
  5. 子节点校验任务通过后,下载文件并返回给用户

特点

大多数代下载服务仅支持 代理下载 github 的文件,而且协议方式仅支持 https

CloudFlare 代下 基于原版项目地址修改。在其基础上,支持下载任意格式二进制文件

也就是下载页面标注的 zip、tar.gz、rar、7z、exe、apk 等。可能其他文件格式没说明,但不代表不支持

同时使其支持 http ,这样对于一些 http 的下载站,也可以使用加速功能了

现在很多代下载 github 项目的服务和网站.本服务支持任意直链下载。

很多代下网站只支持 github 项目。而有的代下网站又完全通过服务器进行代理下载。本站提供两个选项,既可通过 CloudFlare Worker 代下,又可通过服务器代下

如果你的站点访问 CloudFlare 节点速度慢,则可以切换下载方式

而且 CloudFlare 代下没有文件大小限制 ,如果选择 本站代下 大小限制 2G。这个限制可能会有所调整

之所以本站代下有限制,是因为会消耗服务器带宽。如果服务量增多,对服务器压力很大

负载均衡

最最最大的特点就是支持下载节点负载均衡了

如果你会网页调试,应该能看到,下载服务使用了 302 重定向到真实的下载地址

如果你观察得足够仔细,会发现 302 重定向的域名可能每次都不相同。

这是因为本站会对发过来的请求,定向到后端下载地址,而这个后端可以配置多个,实现负载均衡。

理论上,配置的负载均衡后端地址越多越好。如果你想贡献后端,可以联系我增加。

如果后端下载地址返回病毒文件或者篡改的文件,这是没法识别和阻止的。所以如果收到投诉,会禁用掉被投诉的后端

现在这个网站刚起步。没什么访问量,所以暂时无压力
截止到目前,有两个下载节点。都是我自己的海外服务器

而且负载均衡节点可以很快速方便的添加。部署方式也极其简单。具体可以看后面的部署章节。不需要运行脚本及安装我提供的程序,也不需要 Docker

负载均衡支持设置权重。这个权重可由子节点自行设定。如果有人加入公益节点,可以根据自己服务器带宽自行设定权重

目前的负载均衡方式是后端根据权重随机分发下载节点
或许可以提供一个选项,在前端页面手动选择下载节点,但为了保持程序的小巧和简洁。可能不会新增这样的功能。

支持命令行代下

在我实际使用 Ubuntu 系统的过程中,有一种代下需求
我的 Ubuntu 是安装在一台笔记本上的,作为日常工作电脑使用。而我有时候需要使用 wget 下载一些海外文件。当我下载时,速度往往不如意
虽然我可以先下载到 VPS 上,再使用 wget 下载到本地的 Ubuntu 上,但这种操作很繁琐。
所以基于自己的痛点。我对代下服务进行了命令行兼容,通过命令行代下,仅需要在下载链接的前面添加本站代下 url 前缀即可

使用 Cloudflare 进行代下需要在下载链接前添加:

https://pd.zwc365.com/cfdownload/

使用 本站服务器代下 需要在下载链接前添加:

https://pd.zwc365.com/seturl/

例如我要下载 github 上一个项目,原来的下载方式是:

wget https://github.com/zwc456baby/file-proxy/archive/master.zip

当使用代下功能时,下载方式是这样的:

# 使用 CloudFlare 代下功能
wget https://pd.zwc365.com/cfdownload/https://github.com/zwc456baby/file-proxy/archive/master.zip

# 使用本站服务器代下功能
wget https://pd.zwc365.com/seturl/https://github.com/zwc456baby/file-proxy/archive/master.zip

只需在要下载的文件前添加本站 url 即可。这样在纯命令行的系统中,也可以使用到代下服务了

既然支持命令行代下,那么任意的第三方下载软件同样是支持的,例如:迅雷、Aria2、FDM 等。使用方式同理,在下载链接前添加本站下载前缀即可

如何选择下载方式?

CloudFlare 代下无速度及大小限制,推荐使用。但是国内晚上9点左右上网高峰期,可能网络不佳。

本站代下 有速度及大小限制,这是基于服务器带宽消耗考虑的,优先使用 CloudFlare 代下

如果遇到访问情况不佳,再尝试切换两种下载方式。

CloudFlare 代下在电信网络实测日间能达到 15M/s (跑满带宽)。而在鹏博士的带宽网络,夜间上网高峰时下载速度仅仅 十几k/s
由于国内有三大运营商。请根据实际情况选择加速方式

无法下载?

如果点击下载后,出现:网站无法连接

或者页面上显示一个报错信息

一般是因为该资源无法直接下载,例如:gitee.com 上的所有资源文件都需要登录账号才能下载。

所以对于需要登录的资源,代下载服务无法正确获取资源。

这是无法解决的。当然,如果出现另外的错误,可以留言

下载出现503错误码?

代下载服务为了防止被滥用,限制了单个用户短时间内能使用的次数。目前两分钟内一个 IP 地址只能使用五次下载服务。

出现502错误码?

如果被下载的资源无法访问,本站会出现 502 错误码

如何添加子节点

添加子节点非常非常简单,不需要安装我提供的软件,不需要运行部署脚本,不需要 docker。只要你的服务器有一个 web 应用即可

下面是使用 Nginx 作为子节点部署的配置文件,如果你连 Nginx 都没有安装,那么需要先安装 Nginx:

debian、Ubuntu 安装 Nginx

sudo apt update
sudo apt install nginx

CentOs 安装 Nginx

sudo yum update
sudo yum install Nginx

在安装完成后,路径 /etc/nginx/conf.d 目录下是所有的server配置文件,在里面新建一个 proxydownload.conf ,然后文件内容如下:

总之是将配置文件放在 Nginx 的 http{} 块内。这份配置文件很长,最好是新建一个 .conf 文件,单独放进去


############## 本机真实代下载后端 #################

# 理论上,即便是 Caddy 或者 Apache 也可以加入子节点
# 或者自行编写兼容的程序也是可以的
# 由于我仅会使用Nginx,所以示例配置是 Nginx 做代理
# PS: 从来没见人使用 Nginx 代下的,我用这个代下也研究了好一段时间才找到了方法
# 实际上你可以看到有一个 /gethost/ 请求,去解析 host,这是没有办法的办法

server{
    # listen 80;
    # 我的示例程序中使用了 https,如果你的公益节点没有https,则使用上面的一行
    listen 80; listen 443 ssl http2;

    # 如果要加入公益下载节点,只需要修改这个 server_name 即可
    # 其余地方都不要改动。当然,如果你会编写 Nginx,可以修改部分配置
    # 如果你会申请证书,也可以将子节点升级为 https
    server_name xxxxx.com;

    # 这是主节点地址,不要轻易修改,除非你自己部署了主节点
    set $base_url      "https://pd.zwc365.com";
    set $base_url_host "pd.zwc365.com";

    # 这里五行是 https 配置,如果你没有证书,删掉这五行
    ssl_session_cache    shared:SSL:5m;
    ssl_session_timeout  30m;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_certificate      /etc/nginx/ssl/zwc365.com/cert.pem;
    ssl_certificate_key  /etc/nginx/ssl/zwc365.com/key.pem;

    resolver          8.8.8.8;
    recursive_error_pages  on;
    proxy_intercept_errors on;
    proxy_redirect         off;

    location = /favicon.ico {return 404;}
    location / {return 302 $base_url;}

    # 主站会对子节点进行可用性检查,必须返回 200 状态码,否则会被移除
    # 节点检查目前30分钟一次,移除后如果检测可用会被自动重新加入
    # 如果要永久移除节点,必须手动移除主站配置文件 
    # 节点支持设置权重,1-5 ,默认权重3,如果带宽较大,可以增大权重
    location = /geturl/ {
        add_header X-Weight "3";
        return 200 "success";
    }

    location ~ /geturl/ {
        # 从主站取到一个下载地址,然后代理 302 下载页
        # 必须从主站取地址,校验这个任务的合法性
        # 如果任务不合法,主站会返回 404
        proxy_pass $base_url;
        proxy_set_header Host $base_url_host;

        error_page 302 = @download_302;
    }
    # 只有这个任务是合法的,主站才会返回 302,此时子节点代理下载
    location @download_302 {
        # 注意:必须使用 set ,将 upstream 的变量保存到一个值
        set $saved_x_real_host '$upstream_http_x_real_host';
        set $next_req_host     '$upstream_http_location';
        set $down_id           '$upstream_http_x_download_id';
        set $x_referer         '$upstream_http_x_referer';
        proxy_pass       $next_req_host;
        proxy_set_header Host $saved_x_real_host;
        proxy_set_header Referer $x_referer;

        error_page 301 302 303 307 308 = @host_302;

        # 这里限制单个文件大小 2048M,速度限制 3M/s
        client_max_body_size 2048M;
        limit_rate 3m;
    }

    # 这是用来拦截内容 302 的
    # 某些下载资源会 302 或者 301 重定向,必须拦截
    # 否则会出现无法代下的情况
    location @host_302 {
        set $next_req_host     '$upstream_http_location';
        # 先去主站,获取 host,否则需要nginx安装 lua 模块
        # 会提高部署难度,为了减少难度,由主站解析 host
        # 最最最 主要的是要得到一个 Host
        proxy_pass $base_url/gethost/$next_req_host;
        proxy_set_header Host $base_url_host;
        proxy_set_header X-Download-Id $down_id;

        error_page 302 = @download_302;
    }
}

整个配置文件中,需要修改的位置只有几项: server_namessl证书

如果你连域名都没有,那么直接填写 ip 也可以。注意,如果你部署的网站没有 https ,可以删掉关于 https 那五行配置

然后使用 nginx -s reload 重载配置即可

如果你会修改 Nginx 配置,部分地方也是可以修改的,可以设置请求限制策略,也可以设置服务器权重。主节点会根据权重自动分发任务

当子节点部署完成后,可以留言,然后需要我手动加入到主节点的配置文件中。

快来贡献你的闲置服务器吧

作为下载服务器,带宽最好大于 10M 。且位于海外,例如香港或新加坡

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://zwc365.com/2020/09/24/file-proxy-download