Возможный баг в nginx с 0 телом

Igor Sysoev is at rambler-co.ru
Thu Oct 26 12:11:42 MSD 2006


On Thu, 26 Oct 2006 toto at darkside.tomsk.ru wrote:

> Имеем nginx (пробовались последние версии, включая последнию), back-end 
> apache 1.x. Рабочие скрипты к примеру на php.
> К примеру пытаемся достучаться к скрипту лежащему на apache через nginx:
>
> <?php
> header( "WWW-Authenticate: Basic realm=\"asd\"" );
> exit;
> ?>
>
> Берём тестирующий скрипт примерно такой:
> <?php
> for($a=0; $a<100; $a++)
> {
>    $fp = fsockopen("some.host", 80, $errno, $errstr, 30);
>    if (!$fp)
>    {
>        echo "$errstr ($errno)<br />\n";
>    }
>    else
>    {
>        $out = "GET /test.php HTTP/1.1\r\n";
>        $out .= "Host: some.host\r\n";
>        $out .= "Connection: Close\r\n\r\n";
>
>        fwrite($fp, $out);
>        while (!feof($fp))
>        {
>            echo fgets($fp, 128);
>        }
>        fclose($fp);
>    }
>    echo "\n\n$a\n\n";
> }
> ?>
>
> ответ приходит такой:
> HTTP/1.1 401 Authorization Required
> Server: nginx/0.4.10
> Date: Thu, 26 Oct 2006 07:46:22 GMT
> Content-Type: text/html
> Transfer-Encoding: chunked
> Connection: close
> X-Powered-By: PHP/4.4.4
> Expires: Thu, 19 Nov 1981 08:52:00 GMT
> Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
> Pragma: no-cache
> WWW-Authenticate: Basic realm="asd"
>
> 0 (размер тела)
>
> 0 (номер запроса)
>
> Теперь в чём мега жопа заключается: На каком то запросе (скажем 4 или 10 или 
> 25) nginx выдает хедары, но не отдаёт размер тела и замирает до тех пор пока 
> не вылетит по таймауту. Что приводит к мега жопе в работе с webdav, который 
> общается в большинстве своём тока хедарами. Клиенты просто подвисают, затем 
> рвут соединения с ошибкой.
>
> Что бы это подтвердить мы добавляем в наш скриптик тело и получаем:
> <?php
> header( "WWW-Authenticate: Basic realm=\"asd\"" );
> echo "some.body";
> exit;
> ?>
>
> При тесте ни каких затыков не происходить и скрипт отрабатывается на ура все 
> 100 раз.
>
> ЗЫ: Добавление тела не помогло в работе с webdav, он также рвёт соединия, 
> хотя если обращаться на прямую или через pound всё хорошо.

Какая OS ? Очень похоже на последние ядра Линукса 2.6.x или самые
последние 2.4.x.


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list