提高 Apache 背后 Plone 站点性能的最佳实践

提高 Apache 背后 Plone 站点性能的最佳实践

我在 Apache 2.4 服务器的虚拟主机上运行了少量 Plone 站点。我强烈感觉到性能可以大大提高。

让我们假设 Plone 站点有一个非常基本的设置:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName www.example.com
    CustomLog /var/log/httpd/vhost-example.log combined
    ErrorLog /var/log/httpd/vhost-example.error.log
    RewriteEngine on

    DocumentRoot /opt/zope/instances/example/htdocs
    ErrorDocument 502 /error-500.html
    ErrorDocument 503 /error-500.html

    RewriteEngine On
    RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/http/%{HTTP_HOST}:80/example/VirtualHostRoot/$1 [L,P]
</VirtualHost>

在这种设置中,几乎所有事情都由 Zope 服务器完成,它监听端口,并在虚拟文件夹(位于对象数据库中)8080中运行 Plone 站点。/example

现在,该服务器提供一些静态资源,例如图像和样式表(位于文件系统中),以及一些伪静态资源,如带有时间戳名称的脚本或样式表的汇编(没有文件系统位置)。

一些静态资源具有提示物理资源所在位置的路径(例如/++resource++browsername/name-of-script.jsbrowsername提示在哪里);其他则取自所谓的皮肤(即来自包含它们的第一个皮肤),没有简单的方法可以从皮肤名称中分辨出文件系统的位置(无论如何从响应中都无法知道)。

此类请求不需要由底层 Zope 服务器使用其线程之一来处理。有哪些推荐的策略可以让 Apache 自己完成的事情(更高效,并且不会阻塞 Zope 的线程)远离 Zope 并缓存内容?

因此,完整的解决方案可能包括

  • 在可能的情况下,将静态资源的不同路径映射到已知的文件系统位置
  • 尝试从皮肤中获取静态资源的多个位置
  • 缓存生成的资源(例如 HTML 页面,或 CSS 或 Javascript 的编译)

并且,通过 ZEO 设置,

  • 负载平衡(将请求分发给多个 ZEO 客户端,然后这些客户端再与 ZEO 服务器通信)

有任何配置指南吗?

答案1

Plone 的主要目的是提供一个允许协作编辑网站的多用户内容管理系统。代价是动态创建 Web 内容呈现,速度会有所降低。如果您想要小型、快速的网站,并且大部分时间都是您自己编辑的,那么使用可以为您创建静态网站的生成器软件可能更好。其中相当一部分既有商业版本也有开源版本。话虽如此,原则上,您可以将来自 apache 背后各种来源的动态和静态生成内容结合起来,例如http://httpd.apache.org/docs/2.4/urlmapping.html,位于站点树形结构的任意叶节点。

相关内容