проксирование больших файлов

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