0

我使用 Plone 4.2 和 SSL 设置了 Apache,在ssl.confApache 文件中具有以下规则:

RewriteEngine On
ProxyVia On
Redirect permanent / https://mywebsite.com/PloneSite/subfolder
RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/https/%{SERVER_NAME}:443/VirtualHostRoot/PloneSite/subfolder/$1 [L,P]

但是,大约一天两次(似乎是随机的),该站点会变得非常缓慢并最终开始提供 502 错误(代理错误)。唯一似乎修复它的方法是使用“plonectl restart”重新启动 plone。我真的不知道是什么原因造成的,上面是否有任何似乎不正确的规则?

4

1 回答 1

1

这不是代理设置问题;Plone 的 Apache 代理规则要么有效,要么无效。代理错误是由 Plone 不再响应引起的,这就是为什么重新启动 Plone 可以暂时解决问题。

您需要弄清楚为什么 Plone 停止响应。这可能有多种原因,您必须查明发生了什么。

  • 在您的网站的一部分中,您可能会遇到一个编程错误,它会永远占用一个线程。一旦你用完了线程,Plone 就不能再处理正常的请求并且你得到你的代理错误。Products.signalstack当您的网站不再响应时,您可以使用您的线程来达到峰值。

  • 这可能是破坏了您的 ZODB 缓存的东西;例如,如果一个网络爬虫试图在短时间内连续加载您的所有站点,它可能会导致大量缓存流失,以至于需要一段时间来重建您的目录缓存。仔细查看您的日志文件(来自 Apache 和 Plone 实例)并寻找模式。

    在这种情况下,您要么必须阻止爬虫,要么安装更好的缓存以减轻 Plone 服务器上的负载(Varnish 在此类缓存设置方面做得很好,并进行了一些仔细的调整)。

  • 一些没有经验的目录使用可能会破坏您的 ZODB 缓存,结果相同。在我见过的一个(非常糟糕的)案例中,一些代码会从目录中查找特定类型的所有getObject()对象,调用这些结果(将每个对象加载到内存中),然后将巨大的集合过滤到一个少数实际需要的对象。相反,在加载对象本身之前,应该使用目录来显着缩小要加载的对象列表。

  • 可能是您没有利用 ZODB Blob;大文件存储在磁盘上并直接从磁盘而不是 ZODB 对象提供服务可以显着节省内存缓存。

总而言之,这可能需要一些工作来解决,这取决于根本原因是什么。

于 2012-10-13T08:56:08.697 回答