实现逻辑
启用nginx的X-Accel
用户访问PHP脚本
各种过滤、统计
php使用header("X-Accel-Redirect: /file/$fileName");唤起nginx
nginx接力提供文件传输
详细步骤
1、Nginx配置某个站点,在server {}里面添加:
location /xyz { internal; alias /var/www/myfiles; }
其中别名xyz可以自定义,到时php脚本需要用一样的别名;
alias是这个别名指向的本地文件夹
2、重启nginx
3、创建php下载脚本 http://xxxx.com/download.php
<?php // 机制配置(仅限当前站点) $nginx_x_accel_key = 'xyz'; // 获取下载文件的相对路径 if (!isset($_GET['path'])) { die('缺少参数path'); } $file_path = $_GET['path']; // 相对路径,从nginx的internal的自定义别名xyz的路径开始 $file_name = $file_path; // 文件名 if (stripos($file_path, '\\') !== false) { $parts = explode('\\', $file_path); $file_name = array_pop($parts); } if (stripos($file_path, '/') !== false) { $parts = explode('/', $file_path); $file_name = array_pop($parts); } // 下载统计 $theData = array( 'access_time' => time(), // 时间戳 'access_date' => date("Y-m-d H:i:s", time()), // 日期 'access_url' => $_SERVER['REQUEST_URI'], // 当前访问网址 'referer_url' => $_SERVER['HTTP_REFERER'], // HTTP来源地址(可伪造) 'ip_address' => $_SERVER['REMOTE_ADDR'] // 客户IP地址 ); //print_r($theData);die(); // Array // ( // [access_time] => 1659420862 // [access_date] => 2022-08-02 06:16:50 // [access_url] => /download.php?path=/onedir/shop.apk // [referer_url] => http://suibian.com/ // [ip_address] => 180.149.130.16 // ) // 各种过滤 // ... ip黑名单 // ... referer域名限制 // ... 同IP一小时以内的下载次数 ... // ... // 各种统计操作 // ... // ... // 是否使用Nginx缓存,默认yes header("X-Accel-Buffering", "yes"); // 下载限速 - 字节 - 1024 字节 = 1 千字节(KB) header("X-Accel-Limit-Rate", 1024*1024); // 逻辑处理完毕,允许下载 --- 记得header前不要有任何的输出! header('Content-type: application/octet-stream'); header("Content-Disposition: attachment; filename=" . $file_name); header("X-Accel-Redirect: " . "/{$nginx_x_accel_key}/" . $file_path);
4、访问一下即可下载,可以修改php脚本进行下载统计、各种过滤,限速等限制
nginx
2022-11-28 19Nginx是一个高性能的HTTP和反向代理web服务器,也是站长常见的网站环境之一.nginx凭借高性能低消耗近几年越来越多站长使用,学习好nginx也成为站长必备知识点.我的...
- 开源的Nginx配置文件解析工具 [2024-09-08]
- Nginx常用301重定向代码整理 [2024-02-07]
- Nginx限制国内IP用户访问网站 [2024-01-05]
- nginx判断某个目录不跳转https,其他目录强制跳转https配置规则 [2024-01-03]
- nginx实现子域名301跳转到另外一个域名对应子域名 [2023-12-29]