정상적인 요청과 결합 된 nginx 업로드 진행


15

nginx 업로드 모듈을 사용하지 않고 잘 작동하는 nginx에 대한 좋은 가상 호스트가 있습니다. 이 업로드 요청에 업로드 진행률을 추가하면 이 문제를 어떻게 해결할 수 있습니까? 내가 사용하여 내 파일을 업로드해야 /?r=upload하거나 /upload?foo=bar및 사용하여 업로드 진행 데이터를 추적 /progress또는 뭔가 다른.

# 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;
} 

위의 가상 호스트의 경우 업로드 요청이 /upload/?X-Progress-ID=QLiFKnG5A81K중지됩니다. 무엇이 문제입니까?

/?r=blahblah업로드 파일을을 (를) /upload사용하여 보내면 잘 작동하는 등의 요청이 필요합니다 /?r=upload.


2
내가 실수하지 않으면 구성의 두 가지 모듈 인 업로드 모듈과 업로드 진행 모듈입니다. 업로드 모듈 지시문은 괜찮아 보이지만 nginx 설명서 ( wiki.nginx.org/HttpUploadProgressModule#upload_progress ) 에 명시된 바와 같이 블록에 upload_progress <zone_name> <zone_size>지시문 이 누락되어 location /upload업로드 진행 추적을 활성화 했다고 생각합니다 .
Juan Traverso

답변:


1

작업 예제를 위해 구성을 살펴 보았습니다. 업로드 모듈을 사용하고 다음과 같은 방식으로 진행 상황을 업로드합니다.

    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;
       }
  }

Firebug Net 탭도보십시오. 코드에 올바른 json 출력이 있는지 확인하십시오. 아마도 문제는 실제로 클라이언트 측에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.