我有 django 应用程序(基于 Mezzanine)。
我的 nginx 配置如下:
upstream myhost {
server 127.0.0.1:8000;
}
server {
listen 80;
server_name www.myhost.ru myhost.ru;
client_max_body_size 10M;
keepalive_timeout 15;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_pass http://myhost;
}
location /static/ {
root /home/myhost/virtualenvs/myhost/project;
access_log off;
log_not_found off;
}
location /robots.txt {
root /home/myhost/virtualenvs/myhost/project/static;
access_log off;
log_not_found off;
}
location /favicon.ico {
root /home/myhost/virtualenvs/myhost/project/static/img;
access_log off;
log_not_found off;
}
}
在浏览器中我看到“内部服务器错误”。
我在 /var/log/nginx/errir.log 中看到以下错误:
2013/04/20 12:24:57 [warn] 11479#0: *1 upstream sent more data than specified in "Content-Length" header while reading upstream, client: 89.189.170.4, server: www.rureads.ru, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8000/", host: "myhost.ru"
2013/04/20 12:38:14 [warn] 11481#0: *19 upstream sent more data than specified in "Content-Length" header while reading upstream, client: 89.189.170.4, server: www.rureads.ru, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8000/", host: "myhost.ru"
什么原因可能导致此问题?如何解决?
答案1
修改 nginx 配置:
proxy_buffering off;
答案2
好吧,我为此苦苦挣扎了好一阵子。就我而言,我的 django 应用程序中潜伏着一个与 mezzanine 相关的导入错误(使用 django 开发服务器时不会显示)。出于某种原因(可能是 gunicorn 错误?),此导入错误未显示在浏览器中(即使 DEBUG=True)或由 gunicorn 记录。相反,我只是从 nginx 收到“内部服务器错误”,并在 nginx 错误日志中收到“上游发送了更多指定的数据...”消息。gunicorn 日志只是记录了请求,好像一切正常。由于没有任何地方记录任何特定错误,我花了很长时间才找到导入错误并修复它。就我而言,我能够让 django 错误页面仅通过在设置中注释掉所有 MIDDLEWARE_CLASSES 并设置 DEBUG=True 来显示。这揭示了导入错误,我已修复它。然后,我重新启用了 MIDDLEWARE_CLASSES,重新启动了 gunicorn 工作者,一切正常!
希望这可以为某些人节省一些时间。