Postęp przesyłania nginx w połączeniu ze zwykłym żądaniem

15

Mam dobrego wirtualnego hosta dla nginx, który działa dobrze bez użycia modułu przesyłania nginx. Gdy dodam postęp przesyłania do tego żądania przesyłania. Jak mogę to rozwiązać? muszę przesłać moje pliki za pomocą /?r=uploadlub /upload?foo=bari śledzić dane postępu przesyłania za pomocą /progresslub czegoś innego.

# static9-localhost.sweb
server {

        # upload limit
        # upload_limit_rate 10240;

        # request size limitation
        client_max_body_size 500m;
        client_body_buffer_size 64k;

        # document root
        root /path/to/webapp/static/public/;

        # index file
        index index.php;

        # server name
        server_name static9-localhost.sweb;

        # rewrite rules
        rewrite "^/thumbnail/([A-Za-z0-9]{12})/(.*)/.*$" /index.php?r=thb&unique=$1&prm=$2 last;

        # /
        location @frontcontroller {
                # expires
                expires max;

                # disable etag
                if_modified_since off;
                add_header 'Last-Modified' '';

                # mvc rewrite
                try_files $uri $uri/ /index.php?$uri&$args;
        }

        # upload progress
        location /upload {
                upload_pass @frontcontroller;
                track_uploads proxied 600s;
        }

        # progress
        location = /progress {
                report_uploads proxied;
        }

        # error pages
        error_page 404 /index.php?r=404;
        error_page 403 /index.php?r=403;
        error_page 500 501 502 503 504 /index.php?r=500;

        # php5-fpm
        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9003;
                fastcgi_index index.php;
                fastcgi_read_timeout 300;
                include fastcgi_params;
        }

        # logs
        access_log /path/to/webapp/logs/static_access.log;
        error_log /path/to/webapp/logs/static_error.log;
} 

W przypadku powyższego wirtualnego hosta moje żądanie przesyłania /upload/?X-Progress-ID=QLiFKnG5A81Kzawiesza się. Jaki jest problem?

Muszę poprosić takie jak /?r=blahblahdo pracy, dobrze też, jeśli mogę wysłać moje przesłany plik w /uploadużyciu /?r=upload.

sweb
źródło
2
Jeśli się nie mylę, w konfiguracji znajdują się dwa moduły: moduł przesyłania i moduł postępu przesyłania. Wydaje mi się, że dyrektywy modułu wysyłania są w porządku, ale myślę, że brakuje ci upload_progress <zone_name> <zone_size>dyrektywy dotyczącej location /uploadbloku, która umożliwiała śledzenie postępu wysyłania, jak podano w dokumentacji nginx ( wiki.nginx.org/HttpUploadProgressModule#upload_progress ).
Juan Traverso

Odpowiedzi:

1

Przejrzałem moje konfiguracje w celu znalezienia działającego przykładu. Korzystam z modułów wysyłania i przesyłam postępy w taki sposób:

    upload_progress proxied 4m;
    ...
    server {
        ...

        location ^~ /progress {
                report_uploads proxied;
        }

        location ^~ /services/ {
               rewrite ^/(.*?)/?$ /$1.php break;
               fastcgi_pass unix:/var/run/php5-fpm.sock;
               include fastcgi_params;
        }

        location ^~ /upd/ {
               upload_pass   /services/upload/;
               upload_pass_args on;
               upload_store_access group:rw;
               upload_store /tmp;

               set $upload_field_name file;
               upload_set_form_field $upload_field_name.name "$upload_file_name";
               upload_set_form_field $upload_field_name.path "$upload_tmp_path";
               upload_aggregate_form_field "$upload_field_name.size" "$upload_file_size";
               upload_cleanup 400 404 499 500-505;
               track_uploads proxied 30s;
       }
  }

Zobacz także zakładkę Firebug Net. Sprawdź, czy Twój kod otrzymuje poprawne wyjście Json. Być może problem leży po stronie klienta.

Glueon
źródło