我在 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.js
,browsername
提示在哪里);其他则取自所谓的皮肤(即来自包含它们的第一个皮肤),没有简单的方法可以从皮肤名称中分辨出文件系统的位置(无论如何从响应中都无法知道)。
此类请求不需要由底层 Zope 服务器使用其线程之一来处理。有哪些推荐的策略可以让 Apache 自己完成的事情(更高效,并且不会阻塞 Zope 的线程)远离 Zope 并缓存内容?
因此,完整的解决方案可能包括
- 在可能的情况下,将静态资源的不同路径映射到已知的文件系统位置
- 尝试从皮肤中获取静态资源的多个位置
- 缓存生成的资源(例如 HTML 页面,或 CSS 或 Javascript 的编译)
并且,通过 ZEO 设置,
- 负载平衡(将请求分发给多个 ZEO 客户端,然后这些客户端再与 ZEO 服务器通信)
有任何配置指南吗?
答案1
Plone 的主要目的是提供一个允许协作编辑网站的多用户内容管理系统。代价是动态创建 Web 内容呈现,速度会有所降低。如果您想要小型、快速的网站,并且大部分时间都是您自己编辑的,那么使用可以为您创建静态网站的生成器软件可能更好。其中相当一部分既有商业版本也有开源版本。话虽如此,原则上,您可以将来自 apache 背后各种来源的动态和静态生成内容结合起来,例如http://httpd.apache.org/docs/2.4/urlmapping.html,位于站点树形结构的任意叶节点。