nginx X-Accel-Redirect下载文件的应用

要做一个下载的程序,如果直接是一个真实的文件链接,那么下载就无法进行控制。

可以使用CGI程序将文件从服务器读出来,然后提交客户端下载。这个虽然可以在CGI程序里进行控制,但下载效率很低,对系统资源消耗高。最好的方法就是先用CGI程序控制文件的下载,然后将下载文件的任务交给web服务器。

下面就是我利用nginx做的一次实验。

X-Accel-Redirect:官方解释为http://wiki.nginx.org/NginxXSendfile

我在nginx的配置文件里,添加下面的配置信息:

location /down {
        internal;
        alias   C:/QMDownload/test;
        }

我的php代码为:

header("Content-Type: application/force-download");         #表明是一个下载请求
header('Accept-Range : byte ');   #文件单位
header('Accept-Length: 3428');    #文件长度
header('Content-Disposition: attachment; filename=file.txt');#文件名
header("X-Accel-Redirect: /down/file.txt");      #nginx重定向请求

在这个配置信息中:

第一行:表明监控/down的请求。

第二行:表示这是一个服务器内部请求,不会泄漏给客户端。

第三秆:别名,设置为文件存放的真实位置。

在PHP程序中:前面四行就是告诉浏览器,这是一个下载请求,文件大小,文件名。最后一行,就是使用X-Accel-Redirect告诉浏览器文件在服务器的位置。file.txt这个文件在我电脑的位置为:“C:/QMDownload/test”,php网站目录为:C:/nginx-0.9.4/html。

运行PHP时,X-Accel-Redirect会跳转文件到/down/file.txt,而在nginx里将down转换成内部路径C:/QMDownload/test,nginx就能直接读取到真实的文件路径“C:/QMDownload/test/file.txt”,并提交浏览器下载。

此条目发表在 系统 分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">