使用Gunicorn、Nginx和Djang时出现URL解析错误

2024-05-01 09:01:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个setup 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 development server(1.7.5)时:

^{pr2}$

一切正常。在

但当我跑的时候

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)没有设置。我只获得设置为的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附带的基本服务器工作正常。。。:(


Tags: djangopyhttpsdebuggithubcomhttp错误
1条回答
网友
1楼 · 发布于 2024-05-01 09:01:15

拆卸

   proxy_set_header SCRIPT_NAME /;

从nginx配置将完成这项工作。这就是django如何处理SCRIPT_NAME头:当存在时,django将在解析时从URL的前面剪切该值,并在反转时将其添加回URL的前面。这样你就可以告诉django所有的url都应该是相对于某个目录的,而不需要接触项目中的任何内容。SCRIPT_NAME应该设置为不带尾随的/因此域的根目录的正确值是空字符串(或完全没有SCRIPT_NAME)。

相关问题 更多 >