从不同的服务器提供phpBB静态资源?

时间:2014-09-23 06:03:23

标签: performance webserver phpbb pagespeed static-files

phpBB拥有许多静态资源,并且从不同的服务器为它们提供服务,而动态论坛的服务器可能意味着性能显着提升。我们可以在将来设置过期标题,并可能在将来使用CDN。

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

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

但是,我不清楚这是否会产生其他影响,例如使上传目录无法访问,因为路径似乎是服务器本地的。此外,它无法使用 styles.php

解决动态CSS的生成问题

有没有快速的方法来指示静态资源的更改而不破坏phpBB代码?

2 个答案:

答案 0 :(得分:0)

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

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

所以如果:

  • 您正在使用具有重写功能的浏览器,
  • 启用.htaccess或等效启用
  • mod_rewrite或等效安装,
您可以放置​​.htaccess文件中的

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

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

同样适用于" style"和"主题"静态文件。当浏览器仍然点击你的服务器时, 会有轻微的性能损失,只是为了在其他地方被反弹,但使用现代流水线浏览器并不是真正的问题。此外,在大多数情况下,重定向的资源将被记住"通过浏览器再次赢得服务器(至少一段时间)。

另一种可能性,例如通过NginX来重写输出HTML 。您可以使用HttpSubModule将所有对yoursite / static的引用转到anothersite / differentpath / static。

注意某些文件可能包含可能不再有效的绝对链接,或者可能包含的相对链接"在重写范围之外,所以再次不再工作。例如:

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

另外要注意,因为您已经指定 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中请求任何内容,永远不会被重定向,而是会请求并下载压缩的,优化的,但仍然比您希望更大,从您的服务器合并CSS。

答案 1 :(得分: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']}/",

请注意,在上面的示例中,我已经使用forum_static_url变量替换了phpbb的常用URL,该变量可以填充您希望提供静态文件的域的URL。

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