php – Laravel下载响应,具有热链接保护和低内存使用率

我有一个文件下载网站,我通过Laravel为热链接保护提供文件,但似乎下载让我的php进程保持很长时间(因为一些用户的下载速度很差).

对于热链接保护,我在用户进入下载页面时创建会话,并在单击下载按钮时进行检查.

有没有办法进行热链接保护,还是只能降低内存使用量?

这是触发下载的代码:

if($request->session()->get('file') == $apk->generated_filename) 
        {   
            $headers = array
            (
                'Content-Type' => 'application/vnd.android.package-archive'
            );
            Apk::find($apk->id)->increment('downloads_co');
            return response()->download(config('custom.storage') . $apk->generated_filename, $apk->filename, $headers);
        }
最佳答案
使用X-Accel-Redirect和内部位置

绝对最好的方法是在nginx端使用http://nginx.org/r/internal,并在上游端使用X-Accel-Redirect的HTTP响应头字段进行响应,以便nginx处理.

除非被http://nginx.org/r/proxy_ignore_headers等人阻止,否则nginx会对X-Accel-Redirect上游HTTP响应头执行特殊处理 – 它会在nginx中导致内部重定向(您应该对标记有内部指令的位置执行此操作,以确保仅直接访问这些文件的可能方式是通过这种内部重定向.

这里的想法是,您的PHP脚本仍然可以以您认为必要的任何方式处理身份验证和热链接保护 – 用户身份验证,链接过期,基于AI的单独黑名单以及所有 – 但在一天结束时,脚本完成后,文件到客户端的实际馈送将以最有效的方式直接通过nginx完成.

(请注意,使用internal关键字非常重要 – 它确保恢复下载的唯一方法,无论出于何种原因中断,都会先通过与PHP脚本联系.所以,借助nginx cookbook中这个聪明且经过验证的技巧,你将获得两全其美 – 完全控制热链接和最佳资源利用率.)

转载注明原文:php – Laravel下载响应,具有热链接保护和低内存使用率 - 代码日志