服务器配置

Nginx+X-Accel大文件下载统计、权限判断、速度限制功能

我的站长站 2023-11-10 人阅读

实现逻辑

启用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
nginx
2022-11-28 34

Nginx是高性能HTTP与反向代理Web服务软件,具备低资源消耗、高并发稳定的优势,是站长建站主流环境组件。本站整理全套Nginx学习资料,包含一键安装步骤、基础配置指南...

服务器配置教程标签