Nginx + Apache + NginxHttpUploadProgressModule - иногда проблема с Upload
wmiadmin
nginx-forum на nginx.us
Ср Июн 9 12:16:27 MSD 2010
Добрый день.
Используем nginx + apache + NginxHttpUploadProgressModule
Иногда возникает проблема с закачкой файлов.
Сегодня пример у меня чётко проявлялось в Chrome и Opera, а в Firefox 1 раз была проблема и потом стало всё нормально закачиваться.
Я включил
[code]client_body_in_file_only on;
[/code]
что бы заголовки не удалялись.
[color=green]В рабочем случае я вижу:[/color]
1. Nginx создаёт тело запроса, оно растёт до размера файла.
2. В /tmp появляется файл phpuDeoB7
3. В /tmp появляется файл 1373ea077ca3ed63959ff07725b35707.tmp
Дальше мы нажимаем Save в нашей форме и файл уходит на обработку.
[color=red]В проблемном случае[/color]
1. Nginx создаёт тело запроса, оно растёт до размера файла.
2. В /tmp появляется файл phpuDeoB7
3. В /tmp ничего не появляется
Дальше мы нажимаем Save в нашей форме и получаем ошибку, т.к. проходит валидаци на наличие файла, а его там просто нету.
В обоих слуаях один и тот же файл 350 Мб, если из проблемного браузера загрузить меньшй файл то всё ок.
[b]/.htacess[/b]
[code]
php_flag magic_quotes_gpc Off
php_flag display_errors Off
php_value max_execution_time 9999
php_flag ignore_user_abort Off
php_value upload_max_filesize 999999999
php_value post_max_size 999999999
php_value memory_limit 1024M
[/code]
[b]php.ini[/b]
[code]
max_execution_time = 9999
magic_quotes_gpc = off
safe_mode = Off
file_uploads = On
upload_tmp_dir = /tmp
upload_max_filesize = 1024M
post_max_size = 1024M
memory_limit = 1024M
session.gc_maxlifetime = 86400
allow_url_fopen = On
[/code]
[b]Nginx[/b]
[code]
upload_progress proxied 1m;
server_names_hash_bucket_size 128;
proxy_buffering off;
server_tokens off;
server {
listen 192.168.1.1:80;
server_name site.com;
access_log /var/log/www/nginx_access.log;
error_log /var/log/www/nginx_error.log;
location / {
index index.php;
proxy_pass http://127.0.0.1:8080/;
proxy_redirect http://site.com:8080/ /;
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 1024m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
charset off;
track_uploads proxied 30s;
}
location ~ \.flv$ {
flv;
root /home/www/;
}
location ~* ^.+\.(gif|jpg|png|mpg|mp3|mpeg|avi|ico|txt|css|js)$ {
root /home/www/;
}
location ^~ /admin/include/get_upload_status.php {
report_uploads proxied;
}
[/code]
Бывает что клиент отваливается якобы и мы получаем 499 ошибку, но несмотря на это файл может успешно загрузиться и попасть в /tmp
Т.е. получается что 499 ошибка не показатель успешности Upload.
Хотел бы спросить как происхдит Upload ?
Т.е. какая очерёдность ?
1. Есть форма - выполняем POST - Nginx создаёт тело запроса - собственно сам файл
2. UploadProgressModule - выполняет запрос статуса при загрузке и показывает его в форме
3. Управление передаётся php он копирует файл в /tmp
Такая ли схема Upload ?
Как понять на каком этапе происходит затык ?
Я сделал debug nginx, но лог занимает 450 Мб и я непредставляют что там искать
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,96213,96213#msg-96213
Подробная информация о списке рассылки nginx-ru