【问题标题】:Serve phpBB static resources from a different server?从不同的服务器提供 phpBB 静态资源?
【发布时间】:2014-11-17 05:40:46
【问题描述】:

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 代码?

【问题讨论】:

    标签: performance webserver phpbb pagespeed static-files


    【解决方案1】:

    考虑到您提出问题的日期,我认为您已经在使用 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 的常用 url 替换为 forum_static_url 变量,该变量可以填充您希望提供静态文件的域的 URL。

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

    【讨论】:

      【解决方案2】:

      如果可能的话,我不会接触 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/...))。

      还要注意,由于您指定了 pagespeedmod_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服务器。

      【讨论】:

      • 感谢您抽出宝贵时间提供这个详细的答案,但恐怕它不是很有帮助,也没有回答我关于在哪里进行 phpBB 更改的问题。我们不使用 Apache,301 重定向永远不会比提供正确的资源更好,因为您仍然发出服务器请求。用 NginX 重写 HTML 可能是一个不错的选择,但由于许多资源都是相对的,我仍然会自己弄清楚,所以这不是一个完整的答案。 CSS:最好是能够将它们全部组合成一个带有修改文件名的静态文件。所以谢谢,但这里没有解决方案。
      • 我不太确定解决方案是否存在,除非我们简化设置并至少放弃页面速度。我什至没有考虑过其他问题,例如 CORS。我会再咕哝几句……
      • 当然存在解决方案,我已经开始通过更改 PhpBB 代码来实现它(正如我在问题中所写的那样)。然而,正如我想象的其他人过去可能已经做过的那样,我认为像这里这样的问题可能会为我(和其他人稍后阅读)节省大量时间来重新实现相同的事情。 CORS与它有什么关系?!?!我们只需将生成的 HTML 更改为包含来自另一台服务器的静态资源。如果来自域 X 的页面包含来自域 Y 的 JavaScript,它仍然在域 X 内运行。
      • 通常是的。但是脚本可能会加载额外的代码(插件等)并且不再找到它,或者从不同的域中寻找它并触发同域问题。大多数简单的重写工作;但也应该考虑到有些可能不需要或可能需要额外的解决方法——这就是我要说的。
      猜你喜欢
      • 1970-01-01
      • 2016-04-24
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 2017-08-02
      相关资源
      最近更新 更多