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