Странности с proxy buffering и трансфером файлов больше 1ГБ

iotf nginx-forum на nginx.us
Чт Сен 29 08:59:29 UTC 2011


Здравствуйте, Игорь!

Есть следующая конфигурация: Debian Squeeze
amd64, Apache 2.2.12 (бекэнд), nginx из apt  nginx/0.7.67
(фронтэнд), конфиг файл:
    server
    {
        listen                  x.x.x.x:443;

        keepalive_timeout       60;

        access_log              /dev/null;

        ssl                     on;
        ssl_certificate         cert.pem;
        ssl_certificate_key     key.pem;
        ssl_session_cache       shared:SSL:10m;
        ssl_session_timeout     10m;

        # Obtain host
        if ($request_uri        ~*      "^/([^/]*)(.*)$")
        {
            set $host_parsed    $1;
            set $uri_parsed     $2;
        }
        if ($uri_parsed =       "")
        {
            set $uri_parsed     "/";
        }

        location        /
        {
            # Buffering
            proxy_buffering     on;

            # Proxy specification
            proxy_pass          http://$host_parsed$uri_parsed;
            proxy_set_header    Host                    $host_parsed;
            proxy_set_header    HTTPS_TUNNEL_HOST       $remote_addr;
            proxy_set_header    HTTPS_TUNNEL_SERVER     "myserverid";
            proxy_set_header    HTTPS_PASSED_THROUGH    "1";

            # Debug headers
            proxy_set_header    DEBUG_URI_REQUESTED     $request_uri;
            proxy_set_header    DEBUG_HOST_PARSED       $host_parsed;
            proxy_set_header    DEBUG_URI_PARSED        $uri_parsed;
        }
    }

Пока дело не доходит до файлов размера
1ГБ и более, все работает
безукоризненно. Для файлов более 1ГБ
происходит следующее: загружается
кусок от 1037 до 1700 мегабайт, после чего
nginx перестает отдавать контент. Средний
размер файла - 2-8ГБ. От протяженности
даунлоада по времени ничего не
меняется: тестировали на скоростях от
300кбайт/c до 12мбайт/c. В логах пусто.
Стоит отключить proxy_buffering - все работает.
Анализ путем использования strace
показал, что nginx буферизует не более
1024мб (отслеживается через дескрипторы
fd в proc). Свободного места на разделе, где
nginx хранит промежуточные данные более,
чем достаточно. Коронный вопрос: это
баг или я дурак?

С уважением,

Б.

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,216011,216011#msg-216011



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