传统的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 把以上代码中的0改为1。 然后找到下面这句代码: $_config['download']['xsendfile']['dir'] = '/down/'; 根据论坛所在目录进行相应修改: 如果论坛放在根目录,那么把/down/改为/data/attachment/forum/ 如果论坛放在bbs目录,那么把/down/改为/bbs/data/attachment/forum/ 以此类推。 |