我通过uwsgi和nginx运行django,每当我的应用程序尝试设置一个cookie,nginx显示一个405错误。 该应用程序工作正常与Apache,runserver或gunicorn,和uwsgi服务通常除了redirect问题。
我正在运行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停止错误。 这导致我认为这与redirect没有任何关系,而是与在django admin中保存的对象上创build的消息有关。
更新2:一些进一步挖掘显示,它似乎是一个问题与设置cookie – 切换消息框架使用会话后端停止错误。 我仍然不知道为什么uwsgi / nginx堆栈不会让django设置cookie。 我已经更新了这个问题来反映这一点。
好吧,看起来像增加uwsgi缓冲区大小到16k已经停止了错误。 我猜django消息cookie太大了? 我不确定哪个解决scheme最适合切换到会话存储或增加缓冲区,但是在那里。
我的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消息文档 ,
如果Cookie数据大小超过4096字节,则会丢弃旧邮件。
所以我想这是有道理的,uwsgi缓冲区需要比这更大。