我只有在使用Gunicorn时才会出现一个奇怪的错误:
我有一个设置Nginx的+ Django项目与以下configuration:
location / { proxy_pass http://127.0.0.1:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header SCRIPT_NAME /; }
当我使用django开发服务器(1.7.5)时,使用:
./manage.py runserver 127.0.0.1:8080
一切工作正常。
但是当我跑步
gunicorn -b :8080 --forwarded-allow-ips="*" --proxy-allow-from="*" app.wsgi
我只收到404错误(Django接收请求,因为我有debugging信息)。
这些错误是很奇怪的,因为variablesurlpatterns ( https://github.com/django/django/blob/1.7.5/django/views/debug.py#L1102 )没有设置。 我只获取原因variables( https://github.com/django/django/blob/1.7.5/django/views/debug.py#L1119 )设置为:
{u'path': u'x/'}
正如我所要求的http://domain.something.com/x/
最让人困扰的是django自带的基本服务器工作正常… 🙁
删除
proxy_set_header SCRIPT_NAME /;
从nginx配置将做的工作。 django是如何处理SCRIPT_NAME
头部的:当存在的时候,django会在解析它的时候从URL的前面切掉这个值,并且在反转的时候将它加回到url的前面。 这样,你可以告诉Django所有的URL都应该是相对于某个目录,而不需要触摸项目中的任何东西。 SCRIPT_NAME
应该设置为不包含/你的域的根目录的正确值是一个空字符串(或完全没有SCRIPT_NAME
)。