网站首页 > 精选教程 正文
Nginx广泛应用在各个服务器上,之前一篇笔记里面写了如何用php下载文件,里面写了两种方法来下载文件
nginx配置直接try_files下载文件
php读取文件之后再输出
对于第二种方法,php-fpm和nginx的内存和IO情况都有飙升。
在传统的文件传输过程中,文件数据经历了以下步骤:
硬盘 -> 内核buffer -> 用户buffer -> socket相关缓冲区 -> 协议栈
而sendfile机制被开启之后,减少了一次文件copy,提升了文件传输性能,文件数据经历的步骤如下:
硬盘 -> 内核buffer -> socket相关缓冲区 -> 协议栈
在当前流行的几个web服务器(apache、nginx、lighttpd等)里面,都有关于sendfile的配置。
下面说说如何使用nginx的XSendfile来提升PHP文件下载性能。
关于nginx的XSendfile的详细内容可以看 官方文档
1. nginx开启sendfile
在nginx.conf里面,设置 sendfile on
表示开启sendfile机制
2. 配置路由规则
location /protectedFile/ { internal; root /home/nemo/fileDir;}
internal
表示这个路径只能在nginx内部访问,不能在浏览器里面被访问。
配置完之后,重启nginx。
3. 修改php代码
<?php checkAuthority(); // 做一些业务相关的用户鉴权相关的操作………… $filePath = '/protectedFile/test.pdf'; header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($filePath) . '"'); // 让Xsendfile发送文件 header('X-Accel-Redirect: '.$filePath);?>
在php代码里面使用 X-Accel-Redirect
让nginx使用XSendfile机制提升下载性能,这样用户下载到了 /home/nemo/fileDir/protectedFile/test.pdf
文件
比较一下使用与不使用XSendfile,下载一份20MB+的文件的时候的性能比较
性能指标 | 不使用XSendfile | 使用XSendfile |
---|---|---|
耗时 | 1.13s | 456.32ms |
内存 | 26.1MB | 2.6MB |
猜你喜欢
- 2024-10-03 微服务之——dockerfile 编写 docker部署微服务的好处
- 2024-10-03 Java扩展Nginx之二:编译nginx-clojure源码
- 2024-10-03 带你手撸一个http服务器(带源码) http服务器编程教程
- 2024-10-03 nginx文件下载控制设置 nginx download
- 2024-10-03 php宝塔搭建部署WordPress网站管家小程序源码
- 2024-10-03 Nginx配置RTMP协议详解及使用 nginx-rtmp
- 2024-10-03 Linux 下源码安装Kong(基于数据Postgres)
- 2024-10-03 蓝易云 - LNMP网站框架搭建(编译安装)
- 2024-10-03 centos7 源码nginx1.16.1安装 nginx源码安装 linux
- 2024-10-03 Linux环境通过Dockerfile创建Nginx镜像
你 发表评论:
欢迎- 最近发表
-
- 我的世界光影MOD下载(我的世界光影mod下载安装)
- 我的世界1.7/1.8VoxelMap小地图MOD下载
- 我的世界1.7.10多世界 整合包(我的世界1.7.10forge整合包)
- 我的世界1.8最好用的修改器下载(我的世界1.8最好用的修改器下载安装)
- 我的世界更多弯曲动作MOD下载(我的世界更多弯曲动作mod下载手机版)
- 我的世界龙珠MOD下载(我的世界龙珠模组整合包下载)
- 我的世界1.7.10以太2 下载(我的世界以太2mod1.12.2)
- 我的世界虚拟人生MOD下载分享(我的世界虚拟人生下载安装)
- 我的世界无正版账号的简单联机方法(非网易版,仅适用于局域网)
- “我的语言极限,即是我的世界的极限。” ——《On Java》书籍推荐
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)