UWSGI, Django, problema de cookie nginx - causa erro 405

2

Estou usando o django via uwsgi e nginx, e sempre que meu aplicativo tenta definir um cookie, o nginx exibe um erro 405. O aplicativo funciona bem com o apache, o runserver ou o gunicorn, e o uwsgi o serve normalmente, exceto pelo problema de redirecionamento.

Estou executando o uwsgi da seguinte forma:

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

Meu arquivo live.wsgi tem esta aparência:

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 está enviando solicitações para 127.0.0.1:8082 para este site.

ATUALIZAÇÃO: Estranhamente, o problema parece ser desencadeado pela estrutura de mensagens do Django - removendo django.contrib.messages.middleware.MessageMiddleware pára o erro. Isso me leva a pensar que não tem nada a ver com redirecionamentos, e é, em vez disso, algo a ver com a mensagem que é criada no salvamento de objetos no admin do django.

ATUALIZAÇÃO 2: Algumas pesquisas adicionais revelam que parece haver um problema com os cookies sendo configurados - alternar a estrutura de mensagens para usar o backend da sessão interrompe os erros. Eu ainda estou perdendo por que a pilha uwsgi / nginx não deixa o django definir cookies. Atualizei a pergunta para refletir isso.

    
por Greg 11.07.2012 / 00:38

1 resposta

1

Ok, parece que aumentar o tamanho do buffer do uwsgi para 16k interrompeu os erros. Eu acho que o cookie de mensagens do Django é muito grande? Não tenho certeza de qual solução é melhor para alternar para o armazenamento de sessão ou aumentar o buffer, mas lá vai você.

Meu comando uwsgi agora é assim:

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

De acordo com os documentos de mensagens do Django ,

Old messages are dropped if the cookie data size would exceed 4096 bytes.

Então, acho que faz sentido que o buffer do uwsgi precise ser maior que isso.

    
por 11.07.2012 / 02:27