2014-09-23 75 views
3

phpBB有很多静态资源,并从不同的服务器提供服务,而不是动态论坛的服务器可能意味着显着的性能提升。我们可以在将来设置过期标题,并可能在未来使用CDN。从另一台服务器上提供phpBB静态资源?

从我到目前为止所做的检查,似乎更改functions.php以指示不同的基础目录可能工作。代码

$web_path = '//some.new.domain/path'/*(defined('PHPBB_USE_BOARD_URL_PATH') && PHPBB_USE_BOARD_URL_PATH) ? $board_url : $phpbb_root_path*/; 

然而,这是我不清楚这是否可能有其他影响,如制作上传的目录无法访问的路径似乎本地到服务器。此外,它不能解决动态CSS的使用styles.php

是否有一个快速的方法来指示改变静态资源而不破坏的phpBB代码的生成?

回答

1

如果可能的话,我不会触及PhpBB的代码,而是诉诸Apache的URL重写引擎。

在PHPBB3中,大部分静态内容(按大小)来自/assets/子目录。

所以,如果:

  • 您使用的是重写功能的浏览器,
  • .htaccess或同等启用
  • 和安装mod_rewrite或同等学历,

.htaccess文件你可以放置,

Redirect permanent /assets http://mycdnhoster.com/collector/phpbb3/assets 

这使您可以非常容易地启用/禁用CDN,而不用担心维护对PhpBB代码的修改。

“样式”和“主题”静态文件也一样。有轻微的性能损失,当浏览器仍然击中你的服务器只会被其他一些反弹,但与现代流水线浏览器,这不是一个真正的问题。而且,在大多数情况下,重定向的资源将被浏览器“记住”,不会再次触及服务器(至少有一段时间)。

另一种可能性是例如由NginX将重写为输出HTML。你可以通过使用HttpSubModule来使它成为你所有的静态/静态的参考。

当心某些文件威力同时包含绝对链接可能不再工作,或相对链接可能“落”重写的范围之内,因此再次不再起作用。例如:

  • javascript文件使用“delayed load”或“增量/条件加载”插件和类似功能。
  • 包含字体和背景图像引用的CSS文件(url(../../../path/...))。

而且要小心,因为你已经指定的PageSpeed,那mod_pagespeed可能是这种类型的URL重写的不兼容,因为它将解析HTML并尽量压缩其中引用的资源。因此,您可能会将所有重要的CSS卸载到CDN,,并且它们仍然从您的服务器下载,并嵌入到单个mod_pagespeed的本地CSS引用中的经过优化,压缩且难以识别的表单中。

即,在你的HTML你有

<link href="/app/small.css" ... /> 
<link href="/static/big.css" ... /> 
<link href="/static/big2.css" ... /> 

,你希望重写以获取静态的,从异地加载。如果没有进一步的优化,将会发生什么。取而代之的是,你的客户看到了由mod_pagespeed改写一个页面,上面写着

<link href="/app/small+big+big2.css?pagespeed&whatever" /> 

,他绝不会要求在/static什么,绝不会被重定向,而是将请求并下载比你压缩,优化,但仍然较大'd愿望,从您的服务器合并CSS。

+0

谢谢你的时间与这个详细的答案,但我恐怕这不是很有帮助,并不回答我的问题在哪里做phpBB的变化。我们不使用Apache,而301重定向永远不会比提供正确的资源更好,因为您仍然提出服务器请求。用NginX重写HTML可能是一个不错的选择,但是由于许多资源都是相对的,我仍然可以自己弄清楚这一切,所以这不是一个完整的答案。 CSS:最好能够将它们全部合并成一个具有修改文件名的静态文件。所以谢谢,但这里没有解决办法。 – Collector 2014-10-03 00:30:16

+0

我不太确定解决方案存在*除非我们简化设置并至少放弃pagespeed。我甚至没有考虑其他问题,如CORS。我会更多的嘟on一下...... – LSerni 2014-10-03 06:49:24

+0

当然,有一个解决方案存在,我已经开始通过更改PhpBB代码来实现它(正如我在我的问题中所写的那样)。然而,正如我以前想象别人可能做到的那样,我认为像这样的问题可能会让我(以及其他人在后面阅读)在很多时间重新实现同样的事情。 CORS与它有什么关系?!?!我们只需将生成的HTML更改为包含来自其他服务器的静态资源。如果来自域X的页面包含来自域Y的JavaScript,它仍然在域X内运行。 – Collector 2014-10-03 14:54:54

0

考虑到你的问题的日期,我认为你已经在使用phpBB 3.1,在这种情况下,你可以写一个扩展程序来做你想做的事情,保持phpBB代码完好无损,并且不会干扰论坛升级。 如果您不是,那么您将被禁止修改代码或其他解决问题的方法。

对于3.1,您需要编写一个插入事件'core.page_header_after'的插件,该插件将在page_header()函数结束时执行。这使您可以覆盖标题中创建的所有模板变量,如果您希望在模板中使用其他模板变量,则可以添加新变量。

在你的情况,你需要看看分配这些变量。

'T_ASSETS_PATH'   => "{$forum_static_url}assets", 
'T_THEME_PATH'   => "{$forum_static_url}styles/" . rawurlencode($this->user->style['style_path']) . '/theme', 
'T_TEMPLATE_PATH'  => "{$forum_static_url}styles/" . rawurlencode($this->user->style['style_path']) . '/template', 
'T_SUPER_TEMPLATE_PATH' => "{$forum_static_url}styles/" . rawurlencode($this->user->style['style_path']) . '/template', 
'T_IMAGES_PATH'   => "{$forum_static_url}images/", 
'T_SMILIES_PATH'  => "{$forum_static_url}{$this->config['smilies_path']}/", 
'T_AVATAR_PATH'   => "{$forum_static_url}{$this->config['avatar_path']}/", 
'T_AVATAR_GALLERY_PATH' => "{$forum_static_url}{$this->config['avatar_gallery_path']}/", 
'T_ICONS_PATH'   => "{$forum_static_url}{$this->config['icons_path']}/", 
'T_RANKS_PATH'   => "{$forum_static_url}{$this->config['ranks_path']}/", 

注意,在上面的例子中,我已经换了PHPBB的一贯网址与forum_static_url变量,它可以装满你的域名从那里你想服务于静态文件的URL。

我希望这会有所帮助。 看看已经免费提供给phpBB3.1的一些扩展,以了解如何实现这个简单的扩展。

相关问题