微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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中这个聪明且经过验证的技巧,你将获得两全其美 – 完全控制热链接和最佳资源利用率.)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐