Django

WSGI:從守護程序收到的截斷或過大的響應標頭

  • March 4, 2020

系統配置:Apache2、Django 1.10、Python 3、Ubuntu 16.04 LTS

姜戈debug=True


/var/log/apache2/error.log

[52:53.057967] [wsgi:error] [pid 4303] [client 1.1.1.22:24409] Timeout when reading response headers from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.466726] [wsgi:error] [pid 4305] [client 1.1.1.10:9787] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.466729] [wsgi:error] [pid 4304] [client 1.1.1.4:18417] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.466726] [wsgi:error] [pid 4307] [client 1.1.1.22:35116] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.466756] [wsgi:error] [pid 4306] [client 1.1.1.22:19242] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.467164] [wsgi:error] [pid 4336] [client 1.1.1.4:34187] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.467212] [wsgi:error] [pid 4342] [client 1.1.1.22:28212] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py, referer: http://example.org/
[52:58.467282] [wsgi:error] [pid 4331] [client 1.1.1.22:31045] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py
[52:58.467426] [wsgi:error] [pid 4341] [client 1.1.1.70:22784] Truncated or oversized response headers received from daemon process 'example.org': /home/user/dir/project/main_app/wsgi.py, referer: http://example.org/

我不知道錯誤的原因。但我已將其範圍縮小到 Django wsgi 程序。由於伺服器正確託管靜態文件。

雖然 Cloudflare 有時會顯示 502:Bad Gateway Error,但伺服器本身會顯示 500:Internal Server Error。

我已經嘗試重新啟動伺服器並檢查 Django 的(調試)日誌文件。Django 日誌文件中沒有錯誤資訊(完全沒有)。


我應該如何調試問題?由於 Django 沒有記錄任何內容,我認為問題可能是在 wsgi 中引起的。

注意:伺服器之前工作正常。我做了一些更改*(按原樣還原);Django 外殼工作正常。

變化*

  1. 安裝了 django-pandas、django-model-utils、numpy、scikit-learn
  2. 利用上述庫的程序。(此更改恢復為原始狀態)

在其他類似的問題中,問題是在上傳大文件時引起的。

問題的原因是numpy

已知 Python C 擴展模組(如 numpy)在 mod_wsgi 下使用時會導致超時。

來源:Sean F從守護程序讀取響應標頭時回答超時

我在初始搜尋中沒有找到的類似問題由作者回答和解釋mod_wsgi說 -

一些使用 C 擴展模組的 Python 第三方包,包括 scipy 和 numpy,只能在 Python 主解釋器中工作,不能在子解釋器中使用,因為 mod_wsgi 預設使用。結果可能是執行緒死鎖、不正確的行為或程序崩潰。

資料來源:Graham Dumpleton在安裝 scipy 後對非響應式 apache + mod_wsgi 的回答

解決方案

將以下行添加到您的httpd.conf. 在我的情況下,文件是/etc/apache2/apache2.conf.

WSGIApplicationGroup %{GLOBAL}

引用自:https://serverfault.com/questions/844761