实现逻辑
启用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 23Nginx是一个高性能的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]

