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

时间:2014-07-18 15:47:23

标签: django apache header mod-wsgi daemon

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

"Truncated or oversized response headers received from daemon process" 

我从来没有经历过这样的事情,谷歌也不是这里的关键。 我检查了apache的配置,但没有配置与响应头相关。

我的httpd.conf配置看起来像这样(很标准):

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

是否有任何大师有一个暗示我应该朝哪个方向看?

8 个答案:

答案 0 :(得分:5)

由mod_wsgi从Apache使用的代码对mod_wsgi守护程序模式进程返回的单个响应头的大小应用限制。这将导致来自Apache的一个非常神秘的错误消息,它根本没有指出问题。从内存中,上一个错误是:

Premature end of script headers

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

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

从mod_wsgi守护程序模式返回的内容的默认最大标头大小,即标头名称和值,大约为8192字节。您可以使用' header-buffer-size'来覆盖它。 WSGIDaemonProcess的选项。

你能说明什么应用程序和什么标题是如此之大以至于达到了限制,因为想知道除Keystone之外的其他Python Web应用程序如果是常用的应用程序那么生成如此大的标题。

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

答案 1 :(得分:2)

我们最近遇到了这个问题,经过几天的艰苦探索和巨大头痛,我们发现我们使用psycopg2-binary作为我们的数据库连接器依赖项(我知道,newbs)!它在其文档中正确声明不要在生产环境中使用该软件包。

我们确实添加了所有其他建议的答案,例如将“ WSGIApplicationGroup%{GLOBAL}”添加到我们的设置中(我们保留了此设置),但是单独使用它们还是一起使用都不能解决问题。

我们还发现其他C库(例如numpy)也会引起问题。

希望有一天有帮助。

Django Webfaction 'Timeout when reading response headers from daemon process'

http://initd.org/psycopg/docs/install.html#prerequisites

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我已经安装了 filebeat ,该更改了我的ssl版本,因此psycopy2需要更新,并且错误是从守护进程收到的响应头被截断或过大

执行以下操作:-

使用pip卸载psycopy2软件包。我使用的是pip3,因为我的python版本是3.6.8

sudo pip3 uninstall psycopg2

使用pip重新安装psycopy2。

sudo pip3 install psycopg2

psycopg2-2.7.4 之前的版本 psycopg2-2.8.3

答案 4 :(得分:0)

更新后我突然遇到同样的问题。下一次更新解决了这个问题...我运行arch,截至本文发布之日,repo中的WSGI版本正常运行。

答案 5 :(得分:0)

在我的Django项目中,我有相同的错误消息“从守护进程'...'收到的截断或过大的响应标头:/var/www/dev.audiocont.com/index.wsgi”(没有任何其他错误消息) )。

我的错误是我更改了虚拟环境,却忘记了将Apache设置“ dev.conf”修改为新的venv路径。

答案 6 :(得分:0)

在httpd.conf中更改死锁超时 我尝试了所有操作,但没有一个答案对我有用。然后,我更改了死锁超时,现在一切正常。服务器进入空闲状态以进行长时间处理,只需更改死锁超时即可。

答案 7 :(得分:-1)

原来不是实际问题。问题在于更深层次,因为我将Cairo改为CairoCffi而且RSVG-Handler无法处理来自Cffi的Context-Object。 没有我的执行问题是有一个最新的python库,允许我将svg转换为png。使用CairoSVG的svg2png并不适合我。我得到了

  

cairo返回CAIRO_STATUS_NO_MEMORY:内存不足

错误,我确信,它不会再说实​​话,问题出在其他地方。但是让我们看看。