Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

简单改动减轻附件前端负载

[复制链接]
viswow 发表于 2011-1-30 10:21:31 | 显示全部楼层 |阅读模式
本帖最后由 viswow 于 2011-1-30 10:27 编辑

目前附件模块虽然已经经过了优化,但是在对于附件下载两比较大的网站,还是会造成服务器内存的过多使用,所以整理了一下两种改动,一种是针对系统自带远程附件的改动,另外一种是对于使用了 NFS 作为附件存储的改动。

1.对于远程附件的修改方法:
打开:source\module\forum\forum_attachment.php 找到:
  1. if(!@readfile($_G['setting']['ftp']['attachurl'].'forum/'.$file)) {
复制代码
修改为:
  1. if(!@fread($_G['setting']['ftp']['attachurl'].'forum/'.$file,100)) {
复制代码
即可减轻远程附件对服务器内存的占用。

2.对于使用了NFS附件的修改方法
首先需要对 NFS 的附件目录给一个域名,能够保证该域名能访问到 附件目录的文件,同时从NFS上做好防盗链的设置。
然后修改 config\config_global.php 文件:
  1. // -------------------------  CONFIG DOWNLOAD  -------------------------- //
  2. $_config['download']['readmod'] = 2;
  3. $_config['download']['xsendfile']['type'] = '0';
  4. $_config['download']['xsendfile']['dir'] = '/down/';
复制代码
一段修改为:
  1. // ------------------------- CONFIG DOWNLOAD -------------------------- //
  2. $_config['download']['readmod'] = 2;
  3. $_config['download']['xsendfile']['type'] = '4';
  4. $_config['download']['xsendfile']['dir'] = '/down/';
  5. $_config['download']['xsendfile']['remoteurl'] = 'xxxxxxxx';  //NFS 能够访问到底附件目录,请先测试能访问附件例如 http://img.discuz.net/data/attachment/forum/
复制代码
然后修改文件:source\module\forum\forum_attachment.php 找到:
  1. case 3: $cmd = 'X-Sendfile'; $url = $filename; break;
复制代码
增加:
  1. case 4: $cmd = 'location'; $url = $xsendfile['remoteurl'].$attach['attachment'];break;
复制代码
这样便做到了附件流量的分流~~减轻了 web 服务器的负载。




评分

2

查看全部评分

karluk 发表于 2011-1-30 10:26:28 | 显示全部楼层
(EM:131:)(EM:131:)
(EM:166:)(EM:166:)
回复

使用道具 举报

bobofashion 发表于 2011-1-30 10:51:45 | 显示全部楼层
有用吗????学习
回复

使用道具 举报

marco129 发表于 2011-1-30 20:41:05 | 显示全部楼层
回复

使用道具 举报

1soho 发表于 2011-4-19 11:52:25 | 显示全部楼层
有用吗?
回复

使用道具 举报

kongbaixixi 发表于 2011-4-21 14:33:10 | 显示全部楼层
支持!!!!
回复

使用道具 举报

肥爺 发表于 2011-4-27 23:42:40 | 显示全部楼层
回复

使用道具 举报

bugx 发表于 2011-4-28 16:12:22 | 显示全部楼层
第一条是可以大大减低负载。这个问题那时候我是花了很大力气发现的。但是后续又发现这个方法还不足以全部解决问题。在这段代码的下面。如果web端下载附件,web端服务器会通过FTP去下载这个附件再返回给用户。我检测流量的时候发现从附件服务器到web服务器的单向流量居然有好几个G。这部分流量开支是多余的。其实该扣分也好,判断权限也好,弄完了就直接交给远程服务器去处理下载了。这样就减轻了web端压力了。
目前,PHP日志中还是有很大部分错误中断在forum_attachment.php中。
回复

使用道具 举报

 楼主| viswow 发表于 2011-4-28 17:56:09 | 显示全部楼层
bugx 发表于 2011-4-28 16:12
第一条是可以大大减低负载。这个问题那时候我是花了很大力气发现的。但是后续又发现这个方法还不足以全部解 ...

你所说就是第二种修改方法。
回复

使用道具 举报

bugx 发表于 2011-5-3 15:13:09 | 显示全部楼层
viswow 发表于 2011-4-28 17:56
你所说就是第二种修改方法。

xsendfile
没成功过。。。
这个应该很不错的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-23 23:08 , Processed in 0.032396 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表