Назад | Перейти на главную страницу

восходящий поток отправил больше данных, чем указано в заголовке «Content-Length» при чтении восходящего потока

У меня есть приложение 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"

Что может вызвать проблему? Как это исправить?

Хорошо, так что я долго боролся с этим. В моем случае у меня была ошибка импорта, связанная с мезонином, скрывающимся в моем приложении django (который не проявлялся при использовании сервера разработки django). По какой-то причине (возможно, ошибка стрельбы?) Эта ошибка импорта не отображалась в браузере (даже с DEBUG = True) и не регистрировалась программой gunicorn. Вместо этого я просто получал сообщение «Внутренняя ошибка сервера» от nginx, а в журнале ошибок nginx сообщение «Upstream отправил больше данных, указанных ...». Журналы Gunicorn просто зарегистрировали запрос, как будто все прошло нормально. Учитывая, что нигде не регистрировалась конкретная ошибка, мне потребовалось много времени, чтобы найти ошибку импорта и исправить ее. В моем случае мне удалось отобразить страницу с ошибкой django, только закомментировав все MIDDLEWARE_CLASSES в настройках и установив DEBUG = True. Это выявило ошибку импорта, которую я исправил. Затем я снова включил MIDDLEWARE_CLASSES, перезапустил воркеров, и все заработало нормально!

Надеюсь, это кому-то сэкономит время.