繁体   English   中英

使用Gunicorn,Nginx和Django的网址解析错误

[英]URL resolution error using Gunicorn, Nginx, and Django

我只有在使用Gunicorn时才会发生一个奇怪的错误:

我使用以下配置安装了Nginx + django项目:

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正在接收请求,因为我有调试消息)。

这些错误很奇怪,因为未设置变量urlpatternshttps://github.com/django/django/blob/1.7.5/django/views/debug.py#L1102 )。 我仅获得设置为的原因变量( 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 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM