Nginx下限制文件下载流量的一些细节
Nginx下限流的方法如下:
一般来说,直接指向文件下载这种方法即可了,我的项目中,因为文件下载前要做一些统计及是否登录的处理,所以下载地址是index.php?m=music&c=index&a=get_file&id=363这种格式,一直在location /index.php?m=music&c=index&a=get_file&id=(\d+)$ {这里配置不成功。
偶然发现Nginx下X-Accel-Redirect头。简单来说,文件下载做完预处理后,通过X-Accel-Redirect指向到实际的物理地址,再通过location /Data/Music/ { 来配置限速的内容。
最后,通过internal来拒绝外部访问。
php代码:
http://hi.baidu.com/longniao/item/ecfcb575afecdc2ad6a89c68
http://blog.chinaunix.net/uid-8504518-id-2030653.html
http://hi.baidu.com/quqiufeng/item/6795cfbfa3a02a77254b09e2
http { ... limit_conn_zone $binary_remote_addr zone=one:32k; ... server { ... location /Data/Music/ { internal; limit_conn one 2; limit_rate 3k; } ... } ... }
一般来说,直接指向文件下载这种方法即可了,我的项目中,因为文件下载前要做一些统计及是否登录的处理,所以下载地址是index.php?m=music&c=index&a=get_file&id=363这种格式,一直在location /index.php?m=music&c=index&a=get_file&id=(\d+)$ {这里配置不成功。
偶然发现Nginx下X-Accel-Redirect头。简单来说,文件下载做完预处理后,通过X-Accel-Redirect指向到实际的物理地址,再通过location /Data/Music/ { 来配置限速的内容。
最后,通过internal来拒绝外部访问。
php代码:
//检测文件是否存在 if (!is_file('./Data/Music/'.$files)) { $this->msg(0,'下载失败','请求的文件不存在!'); } $files = '/Data/Music/'.$files; $file_extension = strtolower(substr(strrchr($files, "."), 1)); //获取文件扩展名 $outFile = $info['yycode'].'.'.$file_extension; header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=" . $outFile); header("X-Accel-Redirect: ".$files); exit ();
http://hi.baidu.com/longniao/item/ecfcb575afecdc2ad6a89c68
http://blog.chinaunix.net/uid-8504518-id-2030653.html
http://hi.baidu.com/quqiufeng/item/6795cfbfa3a02a77254b09e2