【问题标题】:Truncated or oversized response headers received from daemon process从守护进程收到的截断或过大的响应标头
【发布时间】:2014-09-09 19:59:01
【问题描述】:

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

"Truncated or oversized response headers received from daemon process" 

我从未经历过这样的事情,而且 Google 也不是这里的关键。 我检查了 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

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

【问题讨论】:

    标签: django apache header mod-wsgi daemon


    【解决方案1】:

    我遇到了同样的问题“响应标题被截断或过大”。

    我通过添加解决了它,

    "WSGIDaemonProcess test user=apache group=apache processes=1 display-name=%{GROUP} header-buffer-size=65536" 
    

    在 app.conf/httpd.conf 中取决于您的配置文件。

    根据您服务器的 RAM 大小更改进程和标头缓冲区大小。默认是 header-buffer-size 是 65536

    【讨论】:

      【解决方案2】:

      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 守护进程崩溃了。您并没有说您看到“分段错误”或类似消息表明发生了崩溃。检查这一点,如果当时错误日志中还有其他消息,请指出它们是什么,并且可以将其视为主要问题。

      【讨论】:

      • 我明天早上会检查这个。问题是由Django引起的,我从网页上的一些统计图表中抓取svg-xml并将它们推送到django(1.6.5),在那里我使用Cairo和xhtml2pdf将它们转换为png文件并放入pdf文件中,是响应。我之前在 WSGIDaemonProcess 上运行过这个应用程序很多次,从来没有遇到过问题。当我在新的 RHEL 6 服务器上测试它时,第一次发生这种情况。 Python 是 2.7.3,Apache 是 2.2。
      • 好的。没有成功!我首先将 header-buffer-size=32768 增加到大约。 16000 和现在 32768。没有变化。重新启动 apache,删除 wsgi.py 的 .pyc 文件等等。没有成功。有关更多信息,这是我使用的 wsgi.py:
      • import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
      • 对不起,我的错。我想这是成功的。我没有在重新启动时关闭应用程序,因此没有重新加载该过程。据我所知,它有效。让我明天测试,然后我给OK标记为已解决。非常感谢格雷厄姆。为我节省了很多时间。干杯 Kartopete
      • 只需设置 'WSGIApplicationGroup %{GLOBAL}' 并查看问题是否消失。进程崩溃的可能性更大,而您只是没有注意到来自 Apache 错误日志的错误消息。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我已安装 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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

            我们最近遇到了这个问题,经过几天的激烈 ugoogleizing 和巨大的头痛之后,我们发现我们正在使用 psycopg2-binary 作为我们的数据库连接器依赖项(我知道,新手)!它在他们的文档中声明不要在生产环境中使用该包。

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

            我们还发现其他 C 库(如 numpy)会导致问题。

            希望有一天这对某人有所帮助。

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

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

            【讨论】:

            • 谢谢...这对我有用。卸载psycopg2-binary 并安装psycopg2
            • 这应该是被接受的答案。也为我工作!
            • 重新安装 psycopg2-binary 对我有用。谢谢!
            • 只执行 'pip install psycopg2' 需要先由 'apt' 安装先决条件,但随后您将拥有一个没有 psycopg2-binary 的工作 psycopg2,这会导致这个令人困惑的问题。见psycopg.org/docs/install.html#prerequisites
            • 我的这个错误是随机出现的(可能是因为 numpy)并导致我的网站崩溃。我只是按照你说的做了,不知道有没有用。您对我如何尝试重现该错误有任何想法吗?
            【解决方案7】:

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

            【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

              原来不是真正的问题。问题更深层次,因为我将 Cairo 更改为 CairoCffi,而 RSVG-Handler 无法处理来自 Cffi 的 Context-Object。 不,我的实际问题是拥有一个最新的 python 库,它允许我将 svg 转换为 png。使用 CairoSVG 中的 svg2png 对我不起作用。我得到一个

              cairo 返回 CAIRO_STATUS_NO_MEMORY:内存不足

              错误,我敢肯定,它不再说真话,问题出在其他地方。不过让我们看看。

              【讨论】:

              • 您是否启用了 SELinux 扩展?在某些情况下,这可能会导致奇怪的内存错误。
              • 你有想过这个吗?
              猜你喜欢
              • 1970-01-01
              • 2015-06-20
              • 2017-11-08
              • 1970-01-01
              • 1970-01-01
              • 2023-01-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多