【发布时间】:2015-05-06 23:08:13
【问题描述】:
我只有在使用 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 正在接收请求,因为我有调试消息)。
这些错误很奇怪,因为没有设置变量 urlpatterns (https://github.com/django/django/blob/1.7.5/django/views/debug.py#L1102)。我只获得 reason 变量 (https://github.com/django/django/blob/1.7.5/django/views/debug.py#L1119) 设置为:
{u'path': u'x/'}
按照我的要求http://domain.something.com/x/
最麻烦的是django自带的基础服务器运行良好... :(
【问题讨论】:
-
您是否尝试过绕过 nginx 直接连接到 gunicorn 服务器?那会发生什么?
-
绕过 nginx 有效。但我只能绕过 nginx 用于开发目的..
-
你试过启动 gunicorn 绑定到 0.0.0.0:8080 吗?
-
尝试从 nginx 配置中删除
proxy_set_header SCRIPT_NAME /;然后重新加载 nginx。 -
我目前无法修改 SCRIPT_NAME。但是,我发现由于该语句,从每个请求中删除了前导“/”。我暂时无法弄清楚的是:Nginx 应该删除“/”吗?并且 django wsgi 处理程序是否应该处理丢失的前导 '/'...
标签: python django nginx proxy gunicorn