Nginx+PHP Xsendfile文件传输
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx+PHP Xsendfile文件传输相关的知识,希望对你有一定的参考价值。
参考技术A传统的文件传输模式中(read/write和send/recv),需要在文件file,系统buffer和用户buffer中反复I/O,造成内存的浪费与资源占用,大致流程如下.
关于Linux User Mode和Kernel Mode
简单图示:
这样的传输方式固然简单可靠,但是由于一共进行了四次跨space的I/O和四次mode切换,所以在传输size过大或数量过多的文件时效率堪忧.
在Linux 2.0+以后提供了一个 sendfile() 的文件传送方式,
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
文档
其大致流程如下:
以上流程中并没有出现mode的切换,并且省略了涉及 user buffer 的两次I/O,所以性能会比传统方式优异许多.
简单图示:
强烈建议先阅读官方文档:
XSendfile-nginx官方文档
需要注意的是:
Apache2 Xsendfile mod
DEMO
如何在亚马逊 linux ami 上为 httpd 2.4 安装 xsendfile?
【中文标题】如何在亚马逊 linux ami 上为 httpd 2.4 安装 xsendfile?【英文标题】:How to install xsendfile for httpd 2.4 on amazon linux ami? 【发布时间】:2014-03-29 18:23:39 【问题描述】:如何在 amazon linux ami 上为 httpd 2.4 安装 xsendfile? amazon 和 epel 的默认软件包存储库没有 httpd 2.4 的软件包,仅适用于 httpd 2.2。如果可能的话,我宁愿不编译模块。谢谢。
【问题讨论】:
【参考方案1】:在编写此答案时,我不知道在 EC2 实例上为 X-sendfile for Apache24 快速安装 Yum/apt-get 样式,但是编译和安装您自己的模块非常容易:
准备工作
mod_xsendfile.c从下载部分下面的链接
https://tn123.org/mod_xsendfile/
安装 GCC 进行编译
sudo yum install gcc
apxs 需要 httpd24-devel
sudo yum install httpd24-devel.x86_64
编译安装
sudo apxs -cia mod_xsendfile.c
编辑你的 http.conf 添加
<IfModule mod_xsendfile.c>
XSendFile on
XSendFilePath /home/path/to/private/files/to/serve/
</IfModule>
重启 Apache24
sudo service httpd restart
完成!
检查您的 phpinfo 或 apache_modules() 以确认一切正常并根据您的喜好修改设置。 享受高效的下载:)
【讨论】:
以上是关于Nginx+PHP Xsendfile文件传输的主要内容,如果未能解决你的问题,请参考以下文章
如何在亚马逊 linux ami 上为 httpd 2.4 安装 xsendfile?
使用 ffmpeg 和 nginx 实时流式传输 .webm 文件