Re: Прием не всех POST запросов, возможно-ли?

pawel nginx-forum на nginx.us
Пн Июн 20 02:26:43 MSD 2011


Изначально планировал бекендом
создавать файл-маркер с уникальным
именем и в качестве action'а формы
отправки отдавать браузеру, затем, в
идеале, в момент начала приема post'а с
файлом nginx'ом удалять файл-маркер, и
затем nginx отдает форму без тела
принятого файла бекэнду.

Сейчас уперся в:
если файл /file_receiver/secret-marker-file-one.html есть,
принимает, нормально, передает бекэнду,
если файла /file_receiver/secret-marker-file-one.html нет,
не передает, но post запрос все равно
принимает весь полностью.
в идеале отработка  if (!-f $request_filename) { return 
444; }  после приема формы запроса и до
приема части с файлом, если такое
вообще возможно.
вот конфиг:


daemon off;
worker_processes  1;


error_log /dev/stdout debug buffer=0;
#error_log file [ debug | info | notice | warn | error | crit ] 
#pid        logs/nginx.pid;




http {
  include       mime.types;
  default_type  application/octet-stream;
  log_format  main  \n '$uri $body_bytes_sent   > > >   $remote_addr -
$remote_user [$time_local] "$request" '
                    '$status "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"' \n;


  access_log /dev/stdout main buffer=0;


  sendfile        on;
  #tcp_nopush     on;

  #keepalive_timeout  0;
  keepalive_timeout  65;
  tcp_nodelay        on;



  gzip  on;
  gzip_min_length  700;  #1100
  gzip_buffers     4 8k;
  #gzip_http_version 1.0;
  gzip_comp_level 7;
  gzip_proxied any;
  gzip_types      text/plain text/html text/css application/x-javascript
text/xml application/xml application/xml+rss text/javascript;


  upload_progress proxied 1m;    # 1mb mem reserved

  server {


    root /home/user/WWW/NGINX/html;


    #listen       127.0.0.1 default;
    server_name  localhost;
    client_max_body_size 100m;

    #root /usr/local/nginx/html;
    uninitialized_variable_warn on;


    location ^~ /progress {
      # report uploads tracked in the 'proxied' zone
      report_uploads proxied;
    }



    location /uploaded_files/ {
      proxy_pass http://127.0.0.1:3000;
      break;
    }


    location ~*
/file_receiver/(secret-marker-file-one|secret-marker-file-two|secret-marker-file-three).html
{




    if ($request_method != POST ) {
	return       444;
    }

      if (!-f $request_filename) {
	return       444;
	#break;
      }


      limit_rate  1k;
      #set $limit_rate  1000;
      # proxy to upstream server
      

      upload_store /home/user/WWW/UPLOADS;
      upload_store_access user:rw;


      #upload_set_form_field $upload_field_name.name
"$upload_file_name";
      upload_set_form_field uploaded_file[filename]
"$upload_file_name";

      #upload_set_form_field $upload_field_name.content_type
"$upload_content_type";
      upload_set_form_field uploaded_file-type- "$upload_content_type";

      #upload_set_form_field $upload_field_name.path
"$upload_tmp_path";
      upload_set_form_field uploaded_file-file- "$upload_tmp_path";
      
      #upload_aggregate_form_field $upload_field_name.size
"$upload_file_size";
      upload_aggregate_form_field uploaded_file-size-
"$upload_file_size";


      #upload_pass_form_field
"^submit$|^description$|^file1$|^file2$|^file";
      #upload_pass_form_field "MAX_FILE_SIZE";
      #upload_pass_form_field "file";

      upload_limit_rate 10k;
      #upload_pass_args on;

      #upload_cleanup 400 404 499 500-505;

  
      upload_pass @backend;


      # track uploads in the 'proxied' zone
      # uploads expires 30s after they finish.
      track_uploads proxied 30s;
    }

    location @backend {
      proxy_set_header  X-Real-IP        $remote_addr;
      proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
      proxy_set_header  Host             $http_host;
      #proxy_redirect    false;
      proxy_pass http://127.0.0.1:3000;
    }

    location / {
      proxy_set_header  X-Real-IP        $remote_addr;
      proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
      proxy_set_header  Host             $http_host;
      #proxy_redirect    false;
      proxy_pass        http://localhost:3000/;
    }


}

}

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,208323,208335#msg-208335




Подробная информация о списке рассылки nginx-ru