为了控制静态文件下载,一般的方法需要PHP使用file_get_contents读取文件,然后传递给客户端。节省资源的方法是使用nginx的x-sendfile模块。原理是在nginx上设置了一个专门的资源目录,客户端无法直接读取,需要PHP授权后才能下载。1、设置nginxlocation/request/uri/{internal;alias/real/path/;}目录/request/uri/设置为internal,客户端无法直接访问。alias对应的文件所在的真实目录。一般这个目录不在public目录下,无法访问。注意设置生效。nginx-sreload2,访问php//验证是否有权限:这就是费了这么大功夫的原因//获取要下载的文件名:$p_file='/request/uri/filename.ext';//告诉nginx释放:header('Content-type:application/octet-stream');//$fileNamehere=basename($p_file)isfilename.extheader('Content-Disposition:attachment;filename="'.$fileName.'"');//nginxsendfileheader('X-Accel-Redirect:'.$p_file);有一些控制选项,X-Accel-Redirect需要提前发送X-Accel-Limit-Rate:1024X-Accel-Buffering:yes|noX-Accel-Charset:utf-8Documentation:https://www.[nginx.com/resources/wik]
