У меня есть приложение 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, перезапустил воркеров, и все заработало нормально!
Надеюсь, это кому-то сэкономит время.