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