проксирование больших файлов
Eugene Peregudov
eugene.peregudov at gmail.com
Mon Jul 7 07:08:34 UTC 2014
Доброго времени суток!
Имеется веб-приложение к хранилищу файлов, преимущественно больших, схема:
client <--> nginx proxy <--> apache, прокси и бэкенд на разных машинах
(nginx/1.6.0, ОС RHEL6.5 x64)
При загрузке большого файла в веб-приложение (10-15Гб), nginx сначала
целиком буферизует содержимое http-запроса, лишь затем отдает бэкенду...
на прокси-машине в момент загрузки файла наблюдается большой client_temp,
соотвественно на клиенте большая задержка:
#lsof | grep client_temp
nginx 30802 nginx ... 8,1 3654929415 394068
/var/cache/nginx/client_temp/0000000002 (deleted)
Периодически, на больших файлах браузер отдает клиенту 502 Bad Gateway,
бэкенд отваливается по таймауту, proxy_buffering off не помогает (по идее
и не должен...).
Есть ли возможность отключения полной буферизации проксируемого запроса на
прокси-машине? т.е. чтобы nginx буферизовал, например, часть запроса от
клиента, затем открывал соединение с бэкендом и неспеша, кусочек за
кусочком передавал данные от клиента бэкенду.
ssl on;
.....
large_client_header_buffers 8 256k;
client_max_body_size 16G;
location / {
proxy_pass http://backend:80/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $host;
proxy_connect_timeout 60;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Connection close;
proxy_pass_header Content-Type;
proxy_pass_header Content-Disposition;
proxy_pass_header Content-Length;
}
Спасибо!
--
With best regards, Eugene JONIK Peregudov
mailto: eugene.peregudov at gmail.com
Подробная информация о списке рассылки nginx-ru