Назад | Перейти на главную страницу

Проблема с файлами cookie UWSGI, Django, nginx - вызывает ошибку 405

Я запускаю django через uwsgi и nginx, и всякий раз, когда мое приложение пытается установить файл cookie, nginx отображает ошибку 405. Приложение отлично работает с apache, runserver или gunicorn, и uwsgi обслуживает его нормально, за исключением проблемы перенаправления.

Я запускаю uwsgi вот так:

uwsgi --master --http-socket :8082 \
      --wsgi-file /var/django/mysite/apache/live.wsgi \
      --touch-reload /var/django/mysite/apache/live.wsgi

Мой файл live.wsgi выглядит так:

import os, sys

PROJECT_ROOT = '/var/django/mysite/'

directory = os.path.join(PROJECT_ROOT, 'src')
if not directory in sys.path:
    sys.path.insert(0, directory)

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

nginx передает запросы на 127.0.0.1:8082 для этого сайта.

ОБНОВЛЕНИЕ: как ни странно, проблема, похоже, вызвана фреймворк сообщений django - удаление django.contrib.messages.middleware.MessageMiddleware останавливает ошибку. Это наводит меня на мысль, что это не имеет ничего общего с перенаправлениями, а имеет какое-то отношение к сообщению, которое создается при сохранении объекта в администраторе django.

ОБНОВЛЕНИЕ 2: Дальнейшее копание показывает, что, похоже, проблема с установкой файлов cookie - переключение структуры сообщений на использование серверной части сеанса останавливает ошибки. Я все еще не понимаю, почему стек uwsgi / nginx не позволяет django устанавливать файлы cookie. Я обновил вопрос, чтобы отразить это.

Итак, похоже, что увеличение размера буфера uwsgi до 16k остановило ошибки. Я думаю, файл cookie сообщений django слишком велик? Я не уверен, какое решение лучше - переключиться на хранилище сеансов или увеличить буфер, но готово.

Моя команда uwsgi теперь выглядит так:

uwsgi --master --http-socket :8082 \
      --wsgi-file /var/django/mysite/apache/live.wsgi \
      --touch-reload /var/django/mysite/apache/live.wsgi \
      --buffer-size 16384

Согласно django messages docs,

Старые сообщения удаляются, если размер данных cookie превышает 4096 байт.

Поэтому я думаю, что имеет смысл, что буфер uwsgi должен быть больше этого.