从守护进程收到截断或超大的响应头

我最近将一个python django应用程序从debian系统迁移到redhat企业发行版。 该应用程序使用httpd,mod_wsgi进行托pipe,并在守护进程中以venv运行。 在大的请求我现在得到以下错误消息在日志文件中:

"Truncated or oversized response headers received from daemon process" 

我从来没有经历过这样的事情,谷歌也不是这里的关键。 我检查了Apache的configuration,但没有configuration与响应头在那里。

我的httpd.confconfiguration看起来像这样(非常标准):

 WSGIPassAuthorization On WSGIScriptAlias / /var/www/myapp/wsgi.py WSGIDaemonProcess my.name python-path=/path/to/myapp/:/path/to/venv/lib/python2.7/site-packages display-name=%{GROUP} WSGIProcessGroup my.name 

有哪位大师有提示我应该朝哪个方向看?

mod_wsgi从Apache使用的代码对从mod_wsgi守护进程模式进程返回的单个响应头的大小应用限制。 这将导致一个来自Apache的真正神秘的错误消息,根本没有指向这个问题。 从记忆中,以前的错误是:

 Premature end of script headers 

在Apache中的大小限制也是硬编码,不能改变。 这导致了一些Python Web应用程序的问题,如OpenStack中的Keystone,它会生成非常大的身份验证标头。

在mod_wsgi 4.1+中,对Apache代码的依赖已经被删除,现在限制是可以配置的。 错误消息也是更具体的,因为你已经看到了。

从mod_wsgi守护进程模式(即头名称和值)返回的默认最大头大小约为8192字节。 您可以通过使用WSGIDaemonProcess的“header-buffer-size”选项来覆盖此选项。

你能指出什么应用程序和头是如此之大以至于已经达到了极限,想知道除了Keystone以外的其他Python Web应用程序是否正在生成如此大的头,如果这是一个常用的应用程序。

第二种可能性来自于该消息中的“截断”引用,即你的mod_wsgi守护进程崩溃了。 你不会说,你看到了“分段错误”或类似的消息表明发生了崩溃。 检查一下,如果错误日志中还有其他消息,则表明它们是什么,并将其视为主要问题。

在使用httpd和mod_wsgi 4.5.4部署Django时,我在CentOS 7服务器上遇到了这个问题。 我不得不恢复使用mod_wsgi 4.3.2解决了我的问题。

更新后,我突然出现了同样的问题。 接下来的更新解决了这个问题…我运行arch,截至这篇文章的日期,WSGI版本的回购作品。

原来不是实际的问题。 当我把开罗改成CairoCffi,而RSVG-Handler无法处理来自Cffi的Context-Object时,问题就更加深入了。 没有我真正的问题是有一个最新的Python库,允许我将SVG转换成PNG。 使用CairoSVG的svg2png不适合我。 我得到一个

开罗返回CAIRO_STATUS_NO_MEMORY:内存不足

错误,我敢肯定,它没有再说实话,问题在别的地方。 但让我们看看。