############## 本机真实代下载后端 ################# # 理论上,即便是 Caddy 或者 Apache 也可以加入子节点 # 或者自行编写兼容的程序也是可以的 # 由于我仅会使用Nginx,所以示例配置是 Nginx 做代理 # PS: 从来没见人使用 Nginx 代下的,我用这个代下也研究了好一段时间才找到了方法 # 实际上你可以看到有一个 /gethost/ 请求,去解析 host,这是没有办法的办法 limit_req_zone $binary_remote_addr zone=forcetwo:2m rate=5r/s; server{ # listen 80; # 我的示例程序中使用了 https,如果你的公益节点没有https,则使用上面的一行 listen 80; listen 443 ssl http2; # 如果要加入公益下载节点,只需要修改这个 server_name 即可 # 其余地方都不要改动。当然,如果你会编写 Nginx,可以修改部分配置 # 如果你会申请证书,也可以将子节点升级为 https server_name real-proxy.zwc365.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 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; # 下载节点支持跨域访问,这样将支持嵌入 url 到任意网页中 add_header Access-Control-Allow-Methods *; add_header Access-Control-Max-Age 3600; add_header Access-Control-Allow-Credentials true; add_header Access-Control-Allow-Origin $http_origin; add_header Access-Control-Allow-Headers $http_access_control_request_headers; resolver 8.8.8.8; recursive_error_pages on; proxy_intercept_errors on; proxy_redirect off; # 对于某些 https 会出现报错 # 部分第三方https网站必须设置此项才可代理访问 proxy_ssl_server_name on; # 这里限制单个文件大小 2048M client_max_body_size 2048M; # 设定编码格式 charset utf-8; location = /favicon.ico {return 404;} location = /robots.txt {return 200 "User-agent: *\nDisallow: /\n";} location / { default_type "text/html"; set $base_url "${scheme}://pd.zwc365.com"; return 404 ' 文件加速下载服务

链接无法访问



点击前往主页 '; } # 主站会对子节点进行可用性检查,必须返回 200 状态码,否则会被移除 # 节点检查目前30分钟一次,移除后如果检测可用会被自动重新加入 # 如果要永久移除节点,必须手动移除主站配置文件 # 节点支持设置权重,1-5 ,默认权重3,如果带宽较大,可以增大权重 location = /geturl/ { add_header X-Weight "3"; return 200 "success"; } location ~ /geturl/ { limit_req zone=forcetwo burst=100 nodelay; # 从主站取到一个下载地址,然后代理 302 下载页 # 必须从主站取地址,校验这个任务的合法性 # 如果任务不合法,主站会返回 404 proxy_pass $base_url; proxy_set_header Host $base_url_host; proxy_set_header X-Forwarded-For $remote_addr; # 子节点支持自定义路径,但是必须在这里声明,默认是 /geturl/ add_header X-First-Url "/geturl/"; error_page 302 = @download_302; error_page 502 504 = @error_502; error_page 503 = @error_503; } # 只有这个任务是合法的,主站才会返回 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'; if ($down_id = ''){return 302 $next_req_host;} proxy_pass $next_req_host; proxy_set_header Host $saved_x_real_host; proxy_set_header Referer $x_referer; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; error_page 301 302 303 307 308 = @host_302; error_page 502 504 = @error_502; error_page 503 = @error_503; } # 这是用来拦截内容 302 的 # 某些下载资源会 302 或者 301 重定向,必须拦截 # 否则会出现无法代下的情况 location @host_302 { set $next_req_host '$upstream_http_location'; if ($down_id = ''){return 302 $base_url/cfworker/$next_req_host;} error_page 502 504 = @error_502; error_page 503 = @error_503; return 302 /geturl/$down_id/$next_req_host; } location @error_502 { default_type "text/html"; set $base_url "${scheme}://pd.zwc365.com"; return 502 ' 文件加速下载服务

502 Bad Gateway



你可以 点这里 查看错误原因 '; } location @error_503 { default_type "text/html"; set $base_url "${scheme}://pd.zwc365.com"; return 503 ' 文件加速下载服务

503 Service Temporarily Unavailable



你可以 点这里 查看错误原因 '; } }