ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

nginx+ssl+download master = битые avi и mp3



Всем привет !

Имею проблему следующего плана.

Есть nginx-ы (на данный момент пробовал 1.0.14 и 1.1.17), которые отдают файлы. Всё работает замечательно, но при использовании Download Master-а файлы avi и mp3 приходят битые.
Конфиг nginx.conf такой.

user www-data;
worker_processes 8;
pid /var/run/nginx.pid;

events {
        worker_connections 768;
}

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
         types_hash_max_size 2048;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        gzip on;
        gzip_disable "msie6";
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}



Конфиг конкретного сервера такой.

upstream server-group {
ip_hash;
server api1:81;
server api2:81;
}

server {
    listen   80;
    server_name files.domainname.com;
    server_name_in_redirect off;
    rewrite ^(.*) https://files.domainname.com$1 permanent;
}

server {

    listen 443;

    ssl on;
    ssl_certificate /etc/nginx/keys/domainname.com.crt;
    ssl_certificate_key /etc/nginx/keys/domainname.com.key;

    ssl_session_timeout 5m;

    ssl_protocols SSLv3 TLSv1;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
    ssl_prefer_server_ciphers on;

    client_max_body_size 2000m;
    server_name files.domainname.com;

location /download/ {
    secure_link $arg_st,$arg_e;
    secure_link_md5 xxx111xxx$uri$arg_e$remote_addr;
    if ($secure_link = "") {
        return 403;
    }

    if ($secure_link = "0") {
        return 403;
    }

    rewrite ^/download/(.*) /rest/download/$1 last;

}

location / {

              rewrite ^/download/(.*) /rest/download/$1 last;

               proxy_pass http://server-group;
                proxy_next_upstream error timeout;

                proxy_redirect     off;
                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

                client_max_body_size       10m;
                client_body_buffer_size    128k;

                proxy_connect_timeout      90;
                proxy_send_timeout         90;
                proxy_read_timeout         90;
               proxy_buffer_size          4k;
                proxy_buffers              4 32k;
                proxy_busy_buffers_size    64k;
                proxy_temp_file_write_size 64k;

            }

            location ^~ /files {
                charset utf-8;
                root       /srv;
                internal;
            }

}

Сейчас стоит такой вот nginx.
nginx version: nginx/1.1.14
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_flv_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_mp4_module --with-http_perl_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/root/nginx-1.1.14/debian/modules/nginx-development-kit --add-module=/root/nginx-1.1.14/debian/modules/nginx-upstream-fair --add-module=/root/nginx-1.1.14/debian/modules/nginx-echo --add-module=/root/nginx-1.1.14/debian/modules/nginx-lua --add-module=/root/nginx-1.1.14/debian/modules/nginx-http-push --add-module=/root/nginx-1.1.14/debian/modules/nginx-upload-module --add-module=/root/nginx-1.1.14/debian/modules/nginx-upload-progress --add-module=/root/nginx-1.1.14/debian/modules/mod_zip --add-module=/root/nginx-1.1.14/debian/modules/headers-more-nginx-module --add-module=/root/nginx-1.1.14/debian/modules/chunkin-nginx-module


Т.е. есть некий шифрованный URL (например https://files.domainname.com/download/fileid123456?st=eEYnzmrrxzTjejtXssRnVQ&e=1332310281&u=4sAl7xYZ6Aqq), который генерится в PHP.  Если его открыть, запрос через балансировщик прилетает на один из nginx-ов, Nginx проверяет через secure_link, правильный ли URL, и, если все ОК, отдаёт его одному из прокси. От прокси прилетает ответ с заголовками X-Accel-Redirect и Content-Disposition, по которому nginx идёт в internal локейшен и отдаёт файл по https-у.

Файлы лежат на подмонтированном через glusterfs сетевом хранилище. Всё это дело живёт под Debian-ом.

Всё работает замечательно, пока мы не попробуем скачать avi или mp3, используя Download Master (пробовали разные версии). Любым другим способом качается замечательно и приходит не битым. Не медиа файлы приходят целыми во всех вариантах. Никаких ошибок нигде не пишется, логи чистые и красивые.

Есть идеи в какую сторону смотреть ?

Павел.
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.