Здравствуйте,
Обновили nginx до версии 1.5.5 и perl-скрипты перестали отдавать файлы, в лог выпадает следующее:
"header already sent while reading response header from upstream"
Нашёл, что всему виной вот этот коммит: http://hg.nginx.org/nginx/rev/03ff14058272
Он проверяет, если заголовок уже отправлялся, то это ошибка.
Но как быть? Нам перед тем как сделать внутренний редирект обязательно нужно установить MIME-тип, так как редирект будет на файл без расширения, и если не установить явно тип контента, то nginx сам установит application/octet-stream.
Устанавливаем из скрипта тип контента таким образом:
$r->send_http_header("$mime")
Если убрать эту строку, то всё работает, но отдаётся с application/octet-stream.
Обновили nginx до версии 1.5.5 и perl-скрипты перестали отдавать файлы, в лог выпадает следующее:
"header already sent while reading response header from upstream"
Нашёл, что всему виной вот этот коммит: http://hg.nginx.org/nginx/rev/03ff14058272
Он проверяет, если заголовок уже отправлялся, то это ошибка.
Но как быть? Нам перед тем как сделать внутренний редирект обязательно нужно установить MIME-тип, так как редирект будет на файл без расширения, и если не установить явно тип контента, то nginx сам установит application/octet-stream.
Устанавливаем из скрипта тип контента таким образом:
$r->send_http_header("$mime")
Если убрать эту строку, то всё работает, но отдаётся с application/octet-stream.