Apache SSL Plone 4.2随机代理错误

Apache SSL Plone 4.2随机代理错误,apache,ssl,proxy,plone,Apache,Ssl,Proxy,Plone,我在SSL.confApache文件中使用Plone 4.2和SSL设置了Apache,并使用以下规则: RewriteEngine On ProxyVia On Redirect permanent / https://mywebsite.com/PloneSite/subfolder RewriteRule ^/(.*) http://localhost:8080/VirtualHostBase/https/%{SERVER_NAME}:443/VirtualHostRoot/PloneSi

我在
SSL.conf
Apache文件中使用Plone 4.2和SSL设置了Apache,并使用以下规则:

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。我真的不知道是什么导致了这种情况,上面的规则有没有不正确的地方?

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

你需要弄清楚为什么普隆停止反应。这可能有很多原因,你必须查明到底发生了什么

  • 你可能会有一个编程错误,在你的网站的一部分,它会永远束缚一个线程。一旦线程用完,Plone将无法再为正常请求提供服务,并且会出现代理错误。当你的站点不再响应时,你可以用它来达到线程的峰值

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

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

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

  • 这可能是因为您没有利用ZODB Blobs;存储在磁盘上并直接从磁盘(而不是从ZODB对象)提供服务的大型文件大大节省了内存缓存


总而言之,根据根本原因,这可能需要一些工作来解决。

谢谢-我怀疑情况就是这样。我正在浏览一些资料,试图找到根本原因,一旦我弄清楚到底发生了什么,我会更新记录单(并接受这个答案)。@nuclearpenguin:不确定更新问题是否是最好的主意。只需为新问题创建一个新问题,你就可以将其剔除。尽量说得具体些。还要注意:这是堆栈溢出,不是Plone支持系统,因此POST不是“票据”。:-)实际上是一个挂起的外部DBMS,而Plone的所有线程都在等待DBMS的响应。@nuclearpenguin:很高兴你能找到答案!:-)为了便于将来参考,向服务器发送
SIGUSR1
信号应该将当前线程堆栈转储到日志中。它可以帮助调试此类问题。