Проблемы с nginx в режиме proxy_pass с amazon и chrome/chromium

Konstantin Pavlov thresh на videolan.org
Пн Дек 12 11:41:58 UTC 2011


Добрый день.

Есть некоторые проблемы с google chrome / chromium и nginx при
использовании nginx как кэширующего сервера для забирания bucket'ов с
amazon.

Примерно один из 10ти запросов на mp3-файл приводит к тому, что google
chrome / chromium не воспроизводит этот mp3-файл.  При запросах напрямую
на amazon bucket проблема не проявляется.

/etc/nginx/nginx.conf:

worker_processes  30;

events {
    worker_connections  1024;
}

http {
    client_max_body_size 1024m;
    proxy_connect_timeout 30s;
    proxy_read_timeout 60s;
    proxy_send_timeout 60s;

    proxy_cache_path /var/lib/nginx/tmp/proxy/cache/ keys_zone=cache:1024m max_size=30000m;

    merge_slashes off;
    ignore_invalid_headers  off;

    proxy_temp_path /var/lib/nginx/tmp/proxy;
    fastcgi_temp_path /var/lib/nginx/tmp/fastcgi;
    client_body_temp_path /var/lib/nginx/tmp/client;

    include       mime.types;
    default_type  application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $bytes_sent $sent_http_content_length '
                        '"$http_user_agent" "$http_x_forwarded_for"';

    keepalive_timeout     0;
    sendfile        off;
    gzip  off;

    server {

        listen 80;
        server_name download-mp3.domain.tld;

        location = /favicon.ico {
                return 204;
        }

        location / {

        proxy_pass http://downloadtld-mp3.s3.amazonaws.com/;
        proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
        proxy_redirect     off;
        proxy_cache cache;
        proxy_cache_valid 1d;
        expires 604800;
        proxy_hide_header X-Amz-Id-2;
        proxy_hide_header X-Amz-Request-Id;
        proxy_hide_header ETag;
        proxy_hide_header Last-Modified;

        }

        access_log  /var/log/nginx/access.log main;
        error_log   /var/log/nginx/error.log debug;

    }

}


При возникновении проблемы, в error.log трижды пишется "client closed
prematurely connection while reading upstream".
От файла не зависит, при вызове URL в строке браузера один раз может пройти
ошибка, второй раз файл может закачаться и воспроизводиться нормально.
Сслучается такое и на файлы, которые уже должны быть в кэше, т.е. когда иду по
списку URL'ов заново, оно опять может проявиться на тех файлах, на которые уже
были запросы.

debug_connection по моему адресу выдаёт огромную тонну информации, разобраться
что именно идёт не так не получается.

Что может быть не так?

-- 
Konstantin Pavlov
VideoLAN team



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