您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程
Discuz的NT静态文件缓存(SQUID)实例介绍
邢编2025-06-24Discuz教程已有人查阅
导读在目前较新版本的产品中,我们提供了缓存静态文件的解决方案,就是使用SQUID做静态前端,将论坛中的大部分静态文件布署或外链到一个新的HTTP链接上,其中可以外链的静态文件包括:
在目前较新版本的产品中,我们提供了缓存静态文件的解决方案,就是使用SQUID做静态前端,将论坛中的大部分静态文件布署或外链到一个新的HTTP链接上,其中可以外链的静态文件包括:
1.Discuz.web/Javascript/ 下所有以‘template_’打头的JS文件以及该文件夹下的部分js文件。
2.模版文件夹下的所有CSS或IMAGE文件(空间相册文件夹除外)
3.前台Image文件夹下的Medal(勋章),Topicidentify(主题鉴定图标)下的所有文件。
同时在较新的产品中,我们新增了一个entlib.config文件(位于discuz.web\config\文件夹下),用于配置所有与Discuz!NT企业版相关的配置信息,上面所说的HTTP外链地址,就在这个文件中有相应配置,我们只要编辑其中的相应节点信息,就可以启用这个功能了,比如下面的这个配置:
我们的产品目前可以支持为不同的模板设置不同的静态文件外链地址,如上图。
这样,当我们设置完成上面的内容之后,就可以在IE页面源码中看到当前的静态文件已被链接新的地址上去了,如下图(showforum.aspx页):
当然,目前完成了程序的开发和配置,下面着重介绍如下如果配置SQUID,以架构启用静态前端服务。
目前在SQUID上有两个平台版本,分别是LINUX和WINDOWS,我们的产品支持这个平台上的SQUID程序。这里为了方便布署,只介绍WINDOW平台上的安装步聚(网上LINUX下安装SQUID的资料非常丰富)。
首先,从下面地址上下载相应的SQUID windows版本到本地。
然后将解压该文件到C盘目录下,在squid\etc目录下把:
1.squid.conf.default拷贝一份重新命名为squid.conf
2.cachemgr.conf.default拷贝一份重新命名为cachemgr.conf
3.mime.conf.default拷贝一份重新命名为mime.conf
接着配置squid.conf,设置相关节点。下面做一下介绍:
SQUID运作模式:
1. 当Squid Server 没有资料时,会先向Sibling 的Squid Server 要资料,如果Sibling没资料,就跳过它直接向Parent 要。
2. 向Parent 要资料,然後一直等,直到Parent 给它资料为止(Parent 自己有的资料或上Internet 去拿)。
3. 没有Parent 时,就自己上Internet 去get。
4. 如果这三者都拿不到资料,才向用户端回报拿不到资料。
这里我将相应的产品静态文件布署到192.168.1.1机器上,并配置了一个端口为7001的IIS站点(注:实际环境下可以省略这一步,将squid缓存的站点信息配置到其squid.conf文件中)。这样,其结点信息如下所示:
下面接着介绍192.168.1.1上的squid.conf配置信息
Squid内在的将每个客户端请求标记为层叠或不可层叠。不可层叠的请求看起来不会导致cache命中。例如,POST请求的响应几乎从不会被cache。在squid能简单的连接到原始服务器时,转发不可cache目标的请求到邻居cache,纯粹是浪费资源。某些区分层叠和不可层叠请求的规则,在squid里难于编码。例如,POST和PUT方式总是不可层叠的。然而,hierarchy_stoplist指令允许你定制这种算法。它包含一个字符串列表,当在URI里发现它们时,squid将请求标记为不可层叠。默认的该列表是:
hierarchy_stoplist ? cgi-bin这样,任何包含问号或cgi-bin字符串的请求匹配该列表,变成不可层叠。
默认的,squid直接发送不可层叠的请求到原始服务器。
可以把其理解为对指定扩展名和链接串用包括特定字符的请求不予缓存和查询。即aspx.html这类请求页面直接转发到原始服务器(originserver )。
下面注释的信息曾用于在生产环境下进行配置
配置完这些信息之后,在命令行窗口下cd 到c:\squid\sbin目录下执行,执行
http://192.168.1.1:81/(你的squid服务器IP地址),这时squid会将请求转到http://192.168.1.1:7001/(之前IIS中创建的web服务器地址)
同样在10.0.8.14上也安装并配置 squid,不过要在cache_peer节点上做上面所说的那个配置,就完成了SQUID的配置工作。
当然,squid缓存的文件基本上都是1:1的,即一个js文件会生成一个缓存文件,大小尺寸没什么变化,只不过如果是图片这类文件的话,squid生成的缓存文件是无法用看图软件打开的,而文本文件就没这个问题了。
注:squid官方站点有详细的配置资料信息,本文介绍的配置内容可作为入门参考使用。
最终配置文件下载链接,点击这里(压缩包中的squid.conf文件)。另外我还在本地用LoadRunner做了并发用户1000(v_user)的测试,效果不错,报告下载地址点击这里。
同时,squid还提供了一个叫squidclient(位于C:\squid\bin)的客户端工具很有用,比如获取squid运行时的一些系统信息信息:
1.Discuz.web/Javascript/ 下所有以‘template_’打头的JS文件以及该文件夹下的部分js文件。
2.模版文件夹下的所有CSS或IMAGE文件(空间相册文件夹除外)
3.前台Image文件夹下的Medal(勋章),Topicidentify(主题鉴定图标)下的所有文件。
同时在较新的产品中,我们新增了一个entlib.config文件(位于discuz.web\config\文件夹下),用于配置所有与Discuz!NT企业版相关的配置信息,上面所说的HTTP外链地址,就在这个文件中有相应配置,我们只要编辑其中的相应节点信息,就可以启用这个功能了,比如下面的这个配置:
<?xml version="1.0"?>
<EntLibConfigInfo xmlns:xsi="http:// .w3.org/2001/XMLSchema-instance" xmlns:xsd="http:// .w3.org/2001/XMLSchema">
<Medaldir>http://10.0.8.12:81/myimage/medals/</Medaldir> <!--勋章-->
<Topicidentifydir>http://10.0.8.12:81/myimage/identify/</Topicidentifydir> <!--主题鉴定图标-->
<Jsdir>http://10.0.8.12:81/javascript/</Jsdir> <!--javascript/目录下的js路径勋章-->
</EntLibConfigInfo>
通过上面的文件配置,就可以将前面所说的1和3这两大类静态文件的外链指到别的地址上了。当然如果要设置模板文件夹下的那些CSS,IMAGE文件,我们还要在管理后台中的模板列表中进行相关设置。这里为了方便起见,我直接在数据库中的dnt_templates表(默认)将相应的模板静态文件外链信息直接写上,如下图:我们的产品目前可以支持为不同的模板设置不同的静态文件外链地址,如上图。
这样,当我们设置完成上面的内容之后,就可以在IE页面源码中看到当前的静态文件已被链接新的地址上去了,如下图(showforum.aspx页):
当然,目前完成了程序的开发和配置,下面着重介绍如下如果配置SQUID,以架构启用静态前端服务。
目前在SQUID上有两个平台版本,分别是LINUX和WINDOWS,我们的产品支持这个平台上的SQUID程序。这里为了方便布署,只介绍WINDOW平台上的安装步聚(网上LINUX下安装SQUID的资料非常丰富)。
首先,从下面地址上下载相应的SQUID windows版本到本地。
然后将解压该文件到C盘目录下,在squid\etc目录下把:
1.squid.conf.default拷贝一份重新命名为squid.conf
2.cachemgr.conf.default拷贝一份重新命名为cachemgr.conf
3.mime.conf.default拷贝一份重新命名为mime.conf
接着配置squid.conf,设置相关节点。下面做一下介绍:
#启用当前主机的81端口为squid服务端口
http_port 81 vhost
#浏览器上显示的主机名称
visible_hostname cache.discuznt
因为squid支持集群布署,所以它提供了相应的配置节点,即cache_peer,详细说明参见该链接。 这里我把布署环境做一下说明,在本部门的服务器环境中,单拿出两台机器互相做为sibling(姊妹)邻居。SQUID运作模式:
1. 当Squid Server 没有资料时,会先向Sibling 的Squid Server 要资料,如果Sibling没资料,就跳过它直接向Parent 要。
2. 向Parent 要资料,然後一直等,直到Parent 给它资料为止(Parent 自己有的资料或上Internet 去拿)。
3. 没有Parent 时,就自己上Internet 去get。
4. 如果这三者都拿不到资料,才向用户端回报拿不到资料。
这里我将相应的产品静态文件布署到192.168.1.1机器上,并配置了一个端口为7001的IIS站点(注:实际环境下可以省略这一步,将squid缓存的站点信息配置到其squid.conf文件中)。这样,其结点信息如下所示:
#配置缓存节点
cache_peer 10.0.8.12 parent 7001 0 no-query no-digest originserver name=a
#10.0.8.13为(姊妹)邻居
cache_peer 10.0.8.13 sibling 81 3130 proxy-only name=b
同样将上面的设置复制到10.0.8.14这台机器上的81端口上运行的squid的相应节点。下面接着介绍192.168.1.1上的squid.conf配置信息
hierarchy_stoplist cgi-bin ? \.aspx \.html
acl QUERY urlpath_regex cgi-bin \? \.aspx \.html
cache deny QUERY
via on
上面的配置信息说明:Squid内在的将每个客户端请求标记为层叠或不可层叠。不可层叠的请求看起来不会导致cache命中。例如,POST请求的响应几乎从不会被cache。在squid能简单的连接到原始服务器时,转发不可cache目标的请求到邻居cache,纯粹是浪费资源。某些区分层叠和不可层叠请求的规则,在squid里难于编码。例如,POST和PUT方式总是不可层叠的。然而,hierarchy_stoplist指令允许你定制这种算法。它包含一个字符串列表,当在URI里发现它们时,squid将请求标记为不可层叠。默认的该列表是:
hierarchy_stoplist ? cgi-bin这样,任何包含问号或cgi-bin字符串的请求匹配该列表,变成不可层叠。
默认的,squid直接发送不可层叠的请求到原始服务器。
可以把其理解为对指定扩展名和链接串用包括特定字符的请求不予缓存和查询。即aspx.html这类请求页面直接转发到原始服务器(originserver )。
下面注释的信息曾用于在生产环境下进行配置
#cache_peer_domain a parent ***.com http:// .***.com/ bbs.***.com home.***.com pma.***.com
#cache_peer_domain b parent .com .net .org .cc .tv .cn .biz .name
注:cache_peer_domain指令是cache_peer_access指令的早期形式。相对于使用完整的访问控制特性,它仅使用URI里的域名。它常用于通过域名区分一组父cache。例如,假如你有一个遍布全球的内部网,你也许想发送请求到位于各自大陆的cache:
#设定不同域名转发到不同的cache_peer上,如果没有这项.不同的域名请求可能被分发到同一台服务器上.
acl all src 0.0.0.0/0.0.0.0
#缓存文件所有的目录以及目录的格式:
cache_dir ufs c:/squid/var/cache 256 16 256
#ICP是轻量级的目标定位协议,它作为Harvest项目的一部分而被发明。ICP客户发送查询消息到一个或多个ICP服务器,询问它们是否缓存了某个URI。每个服务器响应一个ICP_HIT(ICP命中),ICP_MISS(ICP丢失),或其他类型的ICP消息。ICP客户使用ICP响应里的信息来做转发决定。除了指示cache命中,ICP也用于提供关于squid和邻居cache之间网络条件的线索。当使用icp_port指令时,squid自动成为ICP服务器。
icp_port 3130
icp_access allow all
http_access allow all
定义对邻居cache的访问列表。也就是说,它决定哪个请求允许或不允许发送到邻居cache。参见该链接。
cache_peer_access a allow all
#下面注释代码为错误信息保存路径
#error_directory c:/squid/usr/local/squid/share/errors/Simplify_Chinese
#因为现在的IE都是多线程,考虑到服务器带宽等网络资源消耗,所以长链接关闭
client_persistent_connections off
#服务端长链接是用于在服务器端传递消息时使用已打开的socket链接以节省资源而设置的。
server_persistent_connections on
#开启内存池并配置大小
memory_pools on
memory_pools_limit 768 MB
#显示客户端内网IP
forwarded_for on
#关闭client端的统计功能
client_db off
#访问日志,在生产环境下这个文件需要被拆分
access_log c:/squid/var/logs/squid/access.log
#缓存日志,在生产环境下这个文件需要被拆分
cache_log c:/squid/var/logs/squid/cache.log
注:C:\squid\sbin\squid.exe.log文件也很重要,它是squid启动日志,当应用程序出现问题时,可从其中找到一些问题。配置完这些信息之后,在命令行窗口下cd 到c:\squid\sbin目录下执行,执行
c:\squid\sbin\>squid -i -n dnt_squid (注:命名新名称,可使用squid -r -n dnt_squid,删除指定名称的服务)
c:\squid\sbin\>squid -z
这样就在机器上安装的squid的服务。下面就启动该服务:
c:\squid\sbin\>net start dnt_squid (上面定义的服务名称) 注:停止服务 net stop dnt_squid
这时在IE 问squid服务器:http://192.168.1.1:81/(你的squid服务器IP地址),这时squid会将请求转到http://192.168.1.1:7001/(之前IIS中创建的web服务器地址)
同样在10.0.8.14上也安装并配置 squid,不过要在cache_peer节点上做上面所说的那个配置,就完成了SQUID的配置工作。
当然,squid缓存的文件基本上都是1:1的,即一个js文件会生成一个缓存文件,大小尺寸没什么变化,只不过如果是图片这类文件的话,squid生成的缓存文件是无法用看图软件打开的,而文本文件就没这个问题了。
注:squid官方站点有详细的配置资料信息,本文介绍的配置内容可作为入门参考使用。
最终配置文件下载链接,点击这里(压缩包中的squid.conf文件)。另外我还在本地用LoadRunner做了并发用户1000(v_user)的测试,效果不错,报告下载地址点击这里。
同时,squid还提供了一个叫squidclient(位于C:\squid\bin)的客户端工具很有用,比如获取squid运行时的一些系统信息信息:
squidclient -p 81 mgr:info #squid运行状态信息
squidclient -p 81 mgr:mem #squid内存使用情况
squidclient -p 81 mgr:objects #quid已经缓存的列表
squidclient -p 80 mgr:diskd #squid的磁盘使用情况
当然用的最多的还是PURGE指令,它会强制更新某一url缓存信息,形如
squidclient -p 81 -m PURGE http://10.0.8.12/:81/css/dnt.css
更多的信息可以使用帮助命令:
squidclient -h
好的,今天的内容就先到这里的。
本文标签:
很赞哦! ()
图文教程
discuz设置二次开发的方法
要设置Discuz二次开发,请执行以下操作:在 config/config_global.php 中启用二次开发 (ALLOW_MODULES = true)在 adminCP 中启用“允许二次开发”创建扩展目录和文件在
Discuz nt插件开发教程
1 新建一个空白项目,引入Discuz.Cache.dll(缓存),Discuz.Common.dll(公用类)Discuz.Config.dll(文件配置类),Discuz.Data.dll(数据访问类),Discuz.Entity.dll(实体类),
Discuz公共样式
由于论坛开始,注册会员较少,且会员数是论坛敏感隐私数据,一般不要对外显示,因此需要删除注册会员数,步骤discuz根目录--》template--》default--》forum--》discuz.htm
Discuz NT相册查看插件开发实例
现在把他整合在Discuz NT 的相册程序中.下面介绍一下实现方法. 貌似太简单了点.然后在discuz NT网站的根目录下新建一个文件夹来放highslide库, 我这里是命名为static
相关源码
-
(自适应响应式)HTML5电脑手机电子数码产品配件pbootcms模板下载本模板为电脑配件、手机配件及数码周边产品企业设计,基于PbootCMS内核开发。采用现代化响应式布局,适配各类移动设备,能够专业展示各类电子产品配件参数、应用场景和技术特点。模板内置多种产品展示模块,满足不同类型配件企业的展示需求。查看源码 -
(PC+WAP)蓝色钢结构机械五金工程建筑基建营销型pbootcms模板下载于PbootCMS开发的钢结构与工程机械专用模板,助力企业构建专业级产品展示平台;模板内置工程案例展示、产品参数对照表等专业模块,预设项目进度、施工方案等建筑行业专属栏目查看源码 -
(自适应)物流运输快递仓储货运网站模板免费下载基于PbootCMS内核开发的物流运输行业专用模板,深度适配仓储货运企业的业务展示需求。前端采用响应式布局,自动适配手机端访问,后台数据实时同步更新,帮助企业高效展示运输网络、仓储设施、服务流程等核心业务模块。查看源码 -
自适应html5二极管LED灯具灯饰类企业网网站模板该PbootCMS内核开发的响应式模板专为LED照明、灯具制造类企业设计,通过HTML5技术实现手机与PC端自适应显示,确保跨设备访问体验一致。企业可快速替换图文内容适配其他工业领域查看源码 -
(自适应)html5中英双语通用机械设备pbootcms模板下载本模板基于PbootCMS内核精心开发,为机械设备制造企业量身打造。设计风格大气稳重,充分展现机械行业的专业特质与技术实力。采用HTML5技术构建,支持中英文双语切换,满足国际化业务需求。整站布局合理,充分展示企业产品、案例与服务,帮助访客快速了解企业核心优势。查看源码 -
自适应营销型IT网络工作室互联网建站公司pbootcms网站模板为IT网络服务商、建站企业打造的高性能营销门户,基于PbootCMS开源内核深度开发采用HTML5自适应架构,实现PC与手机端数据实时同步交互。查看源码
| 分享笔记 (共有 篇笔记) |
