簡體   English   中英

網關超時在Apache上使用Django和mod_wsgi

[英]Gateway Timeout Using Django on Apache with mod_wsgi

我在讓Apache正確回復時遇到問題。 我收到瀏覽器錯誤: Gateway Timeout: The gateway did not receive a timely response from the upstream server or application.

我知道應用程序通過mod_wsgi連接到Django層,因為我已經驗證了在連接發生時PostgreSQL中發生的查詢,來自Wagtail CMS的中間件運行。

系統運行RHEL 7.1,Apache 2.4.6和帶有Python 3.4和Django 1.8的mod_wsgi 4.4.21。

這是Apache日志中的錯誤:

[Thu Jan 07 13:25:54.554395 2016] [wsgi:error] [pid 17128] [client 128.91.91.123:50664] Timeout when reading response headers from daemon process 'my_classroom-https': /var/www/html/my_classroom/my_classroom/wsgi.py

這是wsgi.py:

import os, sys
from socket import gethostname
from django.core.wsgi import get_wsgi_application

sys.path.append(os.sep.join(os.path.abspath(__file__).split(os.sep)[:-2]))

# cpl == Core, Production, Linux..
if(gethostname()[:3]) == 'cpl':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_classroom.settings.prod")
# csl == Core, Staging, Linux.
elif(gethostname()[:3]) == 'csl':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_classroom.settings.stage")
# else use dev settings.
# cdl == Core, Development, Linux. vag == Vagrant.
else:
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_classroom.settings.dev")

application = get_wsgi_application()

這是Apache配置的相關部分:

LoadModule wsgi_module modules/mod_wsgi.so
LoadModule ssl_module modules/mod_ssl.so

WSGISocketPrefix /var/run/wsgi

NameVirtualHost *:443
Listen 443
<VirtualHost *:443>

  ServerName my-python-dev.school.edu
  ErrorLog /var/www/logs/classroom-apache-errors.log

  SSLENGINE on

  SSLCertificateFile /etc/pki/tls/certs/localhost.crt
  SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
  SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
  SSLProtocol all -SSLv2

  WSGIApplicationGroup %{GLOBAL}
  WSGIDaemonProcess my_classroom-https python-home=/var/www/virtualenvs/my_classroom request-timeout=600
  WSGIScriptAlias /classroom /var/www/html/my_classroom/my_classroom/wsgi.py process-group=my_classroom-https
  WSGIProcessGroup my_classroom-https
  Alias /classroom/static/ /var/www/html/my_classroom/static/

  LogLevel info
</VirtualHost>

我已經嘗試了一些方法,包括將WSGIDaemonProcess指令的request-timeout參數增加到600秒而不是60秒,但它似乎仍然在60秒左右超時。

任何想法或幫助將不勝感激。 謝謝。

我得到了這個工作。 問題是輔助數據庫定義(非default )無法連接到服務器。 不幸的是,日志中沒有任何跡象表明這一點。 這是一個很難調試的錯誤。

這是我下次看到這個錯誤時會采取的一些步驟:

  • 深呼吸,放松一下!
  • 確認請求中是否在數據庫中發生任何活動。
  • 確保您可以連接到telnet所需的所有服務( telnet mypostgresserver.domain.com 5432telnet ldap.myprivate.network 636 ),並且它們沒有掛起。
  • 修改設置文件,排除任何可能的內容(中間件,可選應用程序,ModelBackend以外的后端等)
  • 如果做不到這一點,請開始評論設置文件的各個部分,看看是否可以得到一個不那么神秘的響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM