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上传下载相关推荐

  1. 大文件传输解决方案:分片上传 / 下载限速

    前言 不少项目中会遇到上传下载视频.更新包.应用程序等文件,此类文件的共同点就是十分巨大,我在项目中遇到过 4G 左右的文件同时 100 多台机器下载,此时如果用 post 上传和下载想一下都不可能, ...

  2. java 上传文件及预览_SpringBoot上传下载文件及在线预览

    SpringBoot上传下载文件及在线预览 今天大概就说说如何使用SpringBoot进行上传和下载以及在线预览文件 本篇主要介绍上传下载的功能,对于界面就简单一点,大致如下: 一.老规矩还是先看看小 ...

  3. [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1

    转自:http://blog.csdn.net/soarheaven/archive/2008/12/08/3474152.aspx 最近项目需要对FTP服务器进行操作,现把实现总结如下: 打算分2篇 ...

  4. ftp上传文件服务器报550错误_java ftp下载文件,Java 实现ftp上传下载文件

    最近项目中需要实现将文件先存放到ftp上,需要的时候再从ftp上下载,做的过程中碰到了问题,发现中文文件名的无法上传到ftp上,ftp上的中文文件名的文件下载不下来,几番折腾,终于搞定了,记录一下备忘 ...

  5. Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1...

    相关文章导航 Sql Server2005 Transact-SQL 新兵器学习总结之-总结 Flex,Fms3相关文章索引 FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统 ...

  6. Xshell传输文件到服务器(centos/ubuntu)上传/下载

    一.利用xshell上传下载内容 点击xftp按钮(绿色按钮),出现一个对话框,对话框左边是本地的文件预览,对话框右边是服务器当前路径的文件预览 上传下载文件,直接拖拉内容 二.其他方式: 1. xs ...

  7. linux rz下载文件,Linux使用rz sz上传下载文件

    Linux使用rz sz上传下载文件 在SecureCRT这样的ssh登录软件里,通过在Linux界面里输入rz/sz命令来上传/下载文件 sz即使send Zmodem,就是用Zmodem文件传输协 ...

  8. 关于java本地读取文件和打包成jar上传到服务器读取的区别

    这个问题在工作中经常遇到,做个笔记以免忘记! 通常我们在开发中本地读取文件在类似在springboot目录下如下: 我们可以各种方法读取到文件路径并且包括文件内容,但是项目打成jar上传到服务器后,很 ...

  9. java大文件解析_java大文件(百M以上)的上传下载实例解析

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 Save 改进后的代码不需要for ...

最新文章

  1. oracle 10035 err 942,案例:Oracle日志报错 Fatal NI connect error 12170 TNS-12535 TNS-00505
  2. Linux shell 中的数组和关联数组
  3. e3 1231 v3 达芬奇_黑苹果E3-1231-V3 + Z97-HD3+GTX960安装High Sierra10.13.6
  4. 【转】CLASS ALV(CL_GUI_ALV_GRID) 添加保存布局(Save Layout)的按钮
  5. day02.3-元组内置方法
  6. C#判断闰年函数及举例
  7. 智慧、智能工业园区管理平台+登记管理+人行闸管理+车辆闸管理+统计分析+系统管理+地理信息+Axure高保真web端后台管理系统
  8. Hibernate查询用法总结
  9. Python实现对nginx日志access.log统计
  10. Linux 【系统知识】 - Cgroup 初步了解
  11. Windows下搭建FTP服务,FileZilla Server
  12. java面试题笔试常见选择题大全含答案
  13. 腾讯云服务器无限流量,腾讯云服务器有流量限制吗,您看仔细了
  14. Java Vector API的使用测试
  15. Python+Vue计算机毕业设计房屋租赁管理系统p8pvy(源码+程序+LW+部署)
  16. python语法报错_Python语法总结
  17. SQLServer中的N是什么意思?
  18. 【Google Play】创建和管理内部测试版本 ( 创建内部测试版本 | 检查并发布内部测试版本 )
  19. 解决: linux Centos8 在.netCore生成验证码图片报:The type initializer for ‘Gdip‘ threw an exception.
  20. 软件测试有哪些职业资格证书?

热门文章

  1. 决赛评委阵容重磅公布!6万大奖,超分辨率图像性能挑战赛最后召集令!
  2. “宝藏”大会NVIDIA GTC Digital来袭!这些AI前沿课程不容错过
  3. 近期知识图谱顶会论文推荐,另附超详笔记解读
  4. 专题解读 |「知识图谱」领域近期值得读的 6 篇顶会论文
  5. ps ico插件_常用 PS 插件合集(1)
  6. InfluxData【环境搭建 03】时序数据库 InfluxDB 离线安装配置使用(下载+安装+端口绑定+管理员用户创建+开启密码认证+开机自启配置)完整流程实例分享
  7. 05丨数据同步:主从库如何实现数据一致
  8. 七牛云——对象存储私有空间下载凭证认证失败401[“error“:“download token auth failed“]解决方案
  9. JAVA——监听器ActionListener与MouseListener执行顺序
  10. BugKuCTF WEB 备份是个好习惯