<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
<META NAME="GENERATOR" CONTENT="GtkHTML/4.1.92">
</HEAD>
<BODY>
Всем привет !<BR>
<BR>
Имею проблему следующего плана.<BR>
<BR>
Есть nginx-ы (на данный момент пробовал 1.0.14 и 1.1.17), которые отдают файлы. Всё работает замечательно, но при использовании Download Master-а файлы avi и mp3 приходят битые.<BR>
Конфиг nginx.conf такой.<BR>
<BR>
user www-data;<BR>
worker_processes 8;<BR>
pid /var/run/nginx.pid;<BR>
<BR>
events {<BR>
worker_connections 768;<BR>
}<BR>
<BR>
http {<BR>
sendfile on;<BR>
tcp_nopush on;<BR>
tcp_nodelay on;<BR>
keepalive_timeout 65;<BR>
types_hash_max_size 2048;<BR>
include /etc/nginx/mime.types;<BR>
default_type application/octet-stream;<BR>
access_log /var/log/nginx/access.log;<BR>
error_log /var/log/nginx/error.log;<BR>
gzip on;<BR>
gzip_disable "msie6";<BR>
include /etc/nginx/conf.d/*.conf;<BR>
include /etc/nginx/sites-enabled/*;<BR>
}<BR>
<BR>
<BR>
<BR>
Конфиг конкретного сервера такой.<BR>
<BR>
upstream server-group {<BR>
ip_hash;<BR>
server api1:81;<BR>
server api2:81;<BR>
}<BR>
<BR>
server {<BR>
listen 80;<BR>
server_name files.domainname.com;<BR>
server_name_in_redirect off;<BR>
rewrite ^(.*) https://files.domainname.com$1 permanent;<BR>
}<BR>
<BR>
server {<BR>
<BR>
listen 443;<BR>
<BR>
ssl on;<BR>
ssl_certificate /etc/nginx/keys/domainname.com.crt;<BR>
ssl_certificate_key /etc/nginx/keys/domainname.com.key;<BR>
<BR>
ssl_session_timeout 5m;<BR>
<BR>
ssl_protocols SSLv3 TLSv1;<BR>
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;<BR>
ssl_prefer_server_ciphers on;<BR>
<BR>
client_max_body_size 2000m;<BR>
server_name files.domainname.com;<BR>
<BR>
location /download/ {<BR>
secure_link $arg_st,$arg_e;<BR>
secure_link_md5 xxx111xxx$uri$arg_e$remote_addr;<BR>
if ($secure_link = "") {<BR>
return 403;<BR>
}<BR>
<BR>
if ($secure_link = "0") {<BR>
return 403;<BR>
}<BR>
<BR>
rewrite ^/download/(.*) /rest/download/$1 last;<BR>
<BR>
}<BR>
<BR>
location / {<BR>
<BR>
rewrite ^/download/(.*) /rest/download/$1 last;<BR>
<BR>
proxy_pass http://server-group;<BR>
proxy_next_upstream error timeout;<BR>
<BR>
proxy_redirect off;<BR>
proxy_set_header Host $host;<BR>
proxy_set_header X-Real-IP $remote_addr;<BR>
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<BR>
<BR>
client_max_body_size 10m;<BR>
client_body_buffer_size 128k;<BR>
<BR>
proxy_connect_timeout 90;<BR>
proxy_send_timeout 90;<BR>
proxy_read_timeout 90;<BR>
proxy_buffer_size 4k;<BR>
proxy_buffers 4 32k;<BR>
proxy_busy_buffers_size 64k;<BR>
proxy_temp_file_write_size 64k;<BR>
<BR>
}<BR>
<BR>
location ^~ /files {<BR>
charset utf-8;<BR>
root /srv;<BR>
internal;<BR>
}<BR>
<BR>
}<BR>
<BR>
Сейчас стоит такой вот nginx.<BR>
nginx version: nginx/1.1.14<BR>
TLS SNI support enabled<BR>
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<BR>
<BR>
<BR>
Т.е. есть некий шифрованный 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-у.<BR>
<BR>
Файлы лежат на подмонтированном через glusterfs сетевом хранилище. Всё это дело живёт под Debian-ом.<BR>
<BR>
Всё работает замечательно, пока мы не попробуем скачать avi или mp3, используя Download Master (пробовали разные версии). Любым другим способом качается замечательно и приходит не битым. Не медиа файлы приходят целыми во всех вариантах. Никаких ошибок нигде не пишется, логи чистые и красивые.<BR>
<BR>
Есть идеи в какую сторону смотреть ?<BR>
<BR>
Павел.
</BODY>
</HTML>