Re: Bad file descriptor при посте картинки и включенной add before body

Maxim Dounin mdounin на mdounin.ru
Вт Мар 23 14:14:58 MSK 2010


Hello!

On Tue, Mar 23, 2010 at 06:04:13AM -0400, Corsar wrote:

> Gentoo 64-х разрядная
> Nginx 0.7.64, через сокет привязал php-fpm 5.3.1
> В настройках виртуал-сервера прописан add_before_body с путем /path/some_file.php
> Постчу картинку, картинка закачивается, показывается, но вверху страницы имеем 502 ошибку.
> В логах nginx-а следующее:
> 2010/03/23 07:13:27  7043#0: *1554413 pread() failed, file "/var/tmp/nginx/client/0000000153" (9: Bad file descriptor) while sending request to upstream, client: 1.2.3.4, server: host.ru, request: "POST /upload.php? HTTP/1.1", subrequest: "/path/some_file.php", upstream: "fastcgi://unix:/var/run/php-fpm.sock:", host: "host.ru", referrer: "http://host.ru/upload.php"
> 
> 
> Такая-же проблема при связке nginx 0.6.32 + php-cgi 5.5.12 по IP на 32-х разрядном Debian-е.

Known issue.  После отправки заголовков основного ответа - файл с 
телом запроса закрывается (дабы не держать его на диске без нужды, 
0.3.3+), а подзапросы его снова пытаются использовать.  Workaround 
- для подзапросов явно прописывать

    proxy_pass_request_body off;
    proxy_set_header Content-Length "";

а для fastcgi соответственно

    fastcgi_pass_request_body off;

Т.е. в вашем случае как-то так:

    location = /path/some_file.php {
        fastcgi_pass_request_body off;
        fastcgi_pass ...
        ...
    }

Возможно для fastcgi ещё понадобится заменить fastcgi_param 
CONTENT_LENGTH на:

    fastcgi_param CONTENT_LENGTH 0;

Но может и без этого заработать, зависит от приложения.

Maxim Dounin



Подробная информация о списке рассылки nginx-ru