############## 本机真实代下载后端 #################
# 理论上,即便是 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
你可以 点这里 查看错误原因
';
}
}