我最近将一个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
是否有任何大师有一个暗示我应该朝哪个方向看?
答案 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'
答案 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:内存不足
错误,我确信,它不会再说实话,问题出在其他地方。但是让我们看看。