nginx 读取文件_Nginx的提升php上传下载
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 |
nginx 读取文件_Nginx的提升php上传下载相关推荐
- 大文件传输解决方案:分片上传 / 下载限速
前言 不少项目中会遇到上传下载视频.更新包.应用程序等文件,此类文件的共同点就是十分巨大,我在项目中遇到过 4G 左右的文件同时 100 多台机器下载,此时如果用 post 上传和下载想一下都不可能, ...
- java 上传文件及预览_SpringBoot上传下载文件及在线预览
SpringBoot上传下载文件及在线预览 今天大概就说说如何使用SpringBoot进行上传和下载以及在线预览文件 本篇主要介绍上传下载的功能,对于界面就简单一点,大致如下: 一.老规矩还是先看看小 ...
- [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
转自:http://blog.csdn.net/soarheaven/archive/2008/12/08/3474152.aspx 最近项目需要对FTP服务器进行操作,现把实现总结如下: 打算分2篇 ...
- ftp上传文件服务器报550错误_java ftp下载文件,Java 实现ftp上传下载文件
最近项目中需要实现将文件先存放到ftp上,需要的时候再从ftp上下载,做的过程中碰到了问题,发现中文文件名的无法上传到ftp上,ftp上的中文文件名的文件下载不下来,几番折腾,终于搞定了,记录一下备忘 ...
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1...
相关文章导航 Sql Server2005 Transact-SQL 新兵器学习总结之-总结 Flex,Fms3相关文章索引 FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统 ...
- Xshell传输文件到服务器(centos/ubuntu)上传/下载
一.利用xshell上传下载内容 点击xftp按钮(绿色按钮),出现一个对话框,对话框左边是本地的文件预览,对话框右边是服务器当前路径的文件预览 上传下载文件,直接拖拉内容 二.其他方式: 1. xs ...
- linux rz下载文件,Linux使用rz sz上传下载文件
Linux使用rz sz上传下载文件 在SecureCRT这样的ssh登录软件里,通过在Linux界面里输入rz/sz命令来上传/下载文件 sz即使send Zmodem,就是用Zmodem文件传输协 ...
- 关于java本地读取文件和打包成jar上传到服务器读取的区别
这个问题在工作中经常遇到,做个笔记以免忘记! 通常我们在开发中本地读取文件在类似在springboot目录下如下: 我们可以各种方法读取到文件路径并且包括文件内容,但是项目打成jar上传到服务器后,很 ...
- java大文件解析_java大文件(百M以上)的上传下载实例解析
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 Save 改进后的代码不需要for ...
最新文章
- oracle 10035 err 942,案例:Oracle日志报错 Fatal NI connect error 12170 TNS-12535 TNS-00505
- Linux shell 中的数组和关联数组
- e3 1231 v3 达芬奇_黑苹果E3-1231-V3 + Z97-HD3+GTX960安装High Sierra10.13.6
- 【转】CLASS ALV(CL_GUI_ALV_GRID) 添加保存布局(Save Layout)的按钮
- day02.3-元组内置方法
- C#判断闰年函数及举例
- 智慧、智能工业园区管理平台+登记管理+人行闸管理+车辆闸管理+统计分析+系统管理+地理信息+Axure高保真web端后台管理系统
- Hibernate查询用法总结
- Python实现对nginx日志access.log统计
- Linux 【系统知识】 - Cgroup 初步了解
- Windows下搭建FTP服务,FileZilla Server
- java面试题笔试常见选择题大全含答案
- 腾讯云服务器无限流量,腾讯云服务器有流量限制吗,您看仔细了
- Java Vector API的使用测试
- Python+Vue计算机毕业设计房屋租赁管理系统p8pvy(源码+程序+LW+部署)
- python语法报错_Python语法总结
- SQLServer中的N是什么意思?
- 【Google Play】创建和管理内部测试版本 ( 创建内部测试版本 | 检查并发布内部测试版本 )
- 解决: linux Centos8 在.netCore生成验证码图片报:The type initializer for ‘Gdip‘ threw an exception.
- 软件测试有哪些职业资格证书?
热门文章
- 决赛评委阵容重磅公布!6万大奖,超分辨率图像性能挑战赛最后召集令!
- “宝藏”大会NVIDIA GTC Digital来袭!这些AI前沿课程不容错过
- 近期知识图谱顶会论文推荐,另附超详笔记解读
- 专题解读 |「知识图谱」领域近期值得读的 6 篇顶会论文
- ps ico插件_常用 PS 插件合集(1)
- InfluxData【环境搭建 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享
- 05丨数据同步:主从库如何实现数据一致
- 七牛云——对象存储私有空间下载凭证认证失败401[“error“:“download token auth failed“]解决方案
- JAVA——监听器ActionListener与MouseListener执行顺序
- BugKuCTF WEB 备份是个好习惯