Тайм-аут шлюза с использованием Django на Apache с 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 и mod_wsgi 4.4.21 с Python 3.4 и Django 1.8.

Вот ошибка в журнале 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>

Я пробовал несколько вещей, в том числе увеличил параметр request-timeout в директиве WSGIDaemonProcess до 600 секунд вместо 60, но время ожидания по-прежнему составляет около 60 секунд.

Приветствуются любые идеи или помощь. Спасибо.


person FlipperPA    schedule 12.01.2016    source источник


Ответы (1)


У меня это работает. Проблема заключалась в определении вторичной базы данных (не default), которое не могло подключиться к серверу. К сожалению, нигде в журналах этого не было. Это сложная ошибка для отладки.

Вот несколько шагов, которые я предприму в следующий раз, когда увижу эту ошибку:

  • Сделайте очень глубокий вдох и расслабьтесь!
  • Подтвердите, происходит ли какая-либо активность в базе данных по запросу.
  • Убедитесь, что вы можете подключиться ко всем службам, необходимым telnet (telnet mypostgresserver.domain.com 5432, telnet ldap.myprivate.network 636), и что они не зависают.
  • Измените файлы настроек, исключив все возможное (промежуточное ПО, дополнительные приложения, серверные части, кроме ModelBackend и т. Д.)
  • В противном случае начните комментировать сегменты файлов настроек, чтобы увидеть, сможете ли вы получить менее загадочный ответ.
person FlipperPA    schedule 13.01.2016