:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://syre.blogbus.com/logs/31197130.html
lighttpd 有一个 X-Sendfile 的特性很有意思。比如传统的做一些需要严格验证的下载之类的功能比如收费下载,需要在程序里验证权限,然后由程序读取文件输出,这样性能不好,占用资源也大,而 web server 本身的功能又不足以提供验证。使用 X-Sendfile 就可以让程序来做验证,而把文件传输交给 web server 来做,各自做各自擅长的事情。
本来以为这功能目前就 lighttpd 有,今天发现原来 nginx 也有这能力,apache 也可以通过第三方模块来实现。
nginx 上这个功能叫做 X-Accel-Redirect 。
假设下载文件的路径在 /path/to/files,比如有 /path/to/files/test1.txt 可以在 nginx 里配置
location /down {
internal;
alias /path/to/files;
}
internal 选项是这个路径只能在 nginx 内部访问。
然后可以在 php 里写
header("X-Accel-Redirect: /down/test1.txt");
就可以了。
另外,如果在程序那头如果不想要开头的那个“/”,比如想写成 header("X-Accel-Redirect: down/test1.txt"); ,那么在 nginx 的那条 alias 的最后就要加一个 “/”。