Python 使用Gunicorn、Nginx和Django时URL解析错误

Python 使用Gunicorn、Nginx和Django时URL解析错误,python,django,nginx,proxy,gunicorn,Python,Django,Nginx,Proxy,Gunicorn,我只有在使用Gunicorn时才会出现一个奇怪的错误: 我有一个安装Nginx+a 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_ho

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

我有一个安装Nginx+a 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)时,使用:

一切正常

但是当我跑的时候

gunicorn -b :8080 --forwarded-allow-ips="*" --proxy-allow-from="*" app.wsgi
我只收到404个错误(django正在接收请求,因为我有调试消息)

这些错误很奇怪,因为没有设置变量urlpatterns()。我仅获取设置为以下值的原因变量()

按照我的要求

最麻烦的是,django附带的基本服务器工作正常…:(

删除

   proxy_set_header SCRIPT_NAME /;

这是django处理
SCRIPT\u NAME
标题的方式:当存在时,django将在解析URL时从URL的前面剪切该值,并在反转URL时将其添加回URL的前面。这样,您就可以告诉django,所有URL都应该与特定目录相关,而无需触摸任何内容在项目中。
SCRIPT\u NAME
应设置为不带尾随/因此域的根目录的正确值为空字符串(或完全没有
SCRIPT\u NAME
).

您是否尝试过直接连接到gunicorn服务器,绕过nginx?然后会发生什么?绕过nginx会起作用。但我只能出于开发目的绕过nginx..您是否尝试过启动gunicorn绑定到0.0.0.0:8080?尝试从nginx配置中删除
代理集头脚本_NAME/;
,然后重新加载nginx。我无法修改fy当前的脚本名称。但是,由于该语句,我发现每个请求中都会删除前导“/”。目前我无法确定的是:Nginx是否应该删除“/”?django wsgi处理程序是否应该处理缺少的前导“/”。。。
{u'path': u'x/'}
   proxy_set_header SCRIPT_NAME /;