есть конфиг nginx:
worker_processes 5;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 10240;
}
http {
include mime.types;
default_type application/octet-stream;
charset UTF-8;
access_log off;
sendfile on;
server_names_hash_bucket_size 64;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 15;
gzip on;
gzip_min_length 1024;
gzip_buffers 12 32k;
gzip_types application/xml text/css application/x-javascript;
client_header_buffer_size 4k;
large_client_header_buffers 4 4k;
output_buffers 4 32k;
..... (описание виртуальных серверов) ....
location / {
fastcgi_pass localhost:8867;
fastcgi_index index.html;
include fastcgi_params;
keepalive_timeout 0;
}
+ есть стандартная форма аплоада файлов:
<form action="..." method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="image" src="..." />
</form>
При отправке запроса - обработчиком выступает perl скрипт с FCGI + FCGI::ProcManager
Файлы через форму отправляются громадные (2-3 Гб, например).
Перл скрипт читает из STDIN до CONTENT_LENGTH
Проблемы собственно две:
1. Когда файл большой - аплоадинг просто прекращается через определенное время (примерно 20-30 секунд после старта) - как этого избежать?
2. Когда файл маленький (успевает закачаться за этот период) - все равно сначала nginx полностью получает его, а только после этого передает fastcgi скрипту. Надо, чтобы скрипт получал контент по мере отправки его клиентом (для реализации прогрессбара). Как это можно реализовать?
Заранее благодарен за ответы.