传统的 Web 服务器在处理文件下载的时候,总是先读入文件内容到应用程序内存,然后再把内存当中的内容发送给客户端浏览器。这种方式在应付当今大负
载网站会消耗更多的服务器资源。 sendfile 是现代操作系统支持的一种高性能网络 IO 方式,操作系统内核的 sendfile 调用可以将文件内容直接推
送到网卡的 buffer 当中,从而避免了 Web 服务器读写文件的开销,实现了 「零拷贝」 模式。
Nginx 对 sendfile 有着良好的支持,Discuz! X2 也支持把附件通过 sendfile 发给客户,对于资源下载类的论坛,能明显减少 PHP 读取附件的资源占用。
1,先在 Nginx 的配置文件里面检查是否有 sendfile off 配置,如果有,那么把 sendfile 改为 on
2,打开论坛的配置文件 config/config_global.php ,找到 $_config['download']['xsendfile']['type'] =,把 0 改为 1
找到 $_config['download']['xsendfile']['dir'] = '/down/';
如果论坛放在根目录,那么把/down/改为/data/attachment/forum/
如果论坛放在 bbs 目录,那么把/down/改为/bbs/data/attachment/forum/
以此类推。
本教程基于用户手册的 Nginx 配置部分编写,实际测试有效。