Note that there are some explanatory texts on larger screens.

plurals
  1. PONginx Tornado File Upload
    primarykey
    data
    text
    <p>I am trying to upload file via nginx_upload_module 2.2.0. I have nginx 1.0.4 setup as a reverse proxy with a tornado server at the backend. Below is my nginx.conf :</p> <pre><code>#user nobody; worker_processes 1; #error_log logs/error.log notice; #error_log logs/error.log info; pid /var/log/nginx.pid; events { worker_connections 1024; } http { include mime.types; index index.html default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] $request ' # '"$status" $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; gzip on; upstream frontends { server 127.0.0.1:8888; } server { listen 80; server_name localhost; #charset koi8-r; # Allow file uploads max 50M for example client_max_body_size 50M; #access_log logs/host.access.log main; error_log /var/log/error.log info; #POST URLn location /upload { # Pass altered request body to this location upload_pass @after_upload; # Store files to this directory upload_store /tmp; # Allow uploaded files to be read only by user upload_store_access user:rw; # Set specified fields in request body upload_set_form_field $upload_field_name.name “$upload_file_name”; upload_set_form_field $upload_field_name.content_type “$upload_content_type”; upload_set_form_field $upload_field_name.path “$upload_tmp_path”; # Inform backend about hash and size of a file upload_aggregate_form_field “$upload_field_name.md5” “$upload_file_md5”; upload_aggregate_form_field “$upload_field_name.size” “$upload_file_size”; #upload_pass_form_field “some_hidden_field_i_care_about”; upload_cleanup 400 404 499 500-505; } location / { root /opt/local/html; } location @after_upload { proxy_pass http://127.0.0.1:8888; } } } </code></pre> <p>I have already tested the setup, and nginx does forward the request to tornado. But when I try to upload the file it gives me a 400: Bad Request http status code. With the tornado log stating that, it's missing the upfile.path in the request. And when I try to go to the folder where nginx should have supposedly stored the uploaded file it isn't there. And hence the 400 error.</p> <p>Can anyone point why is nginx not storing the file at the specified directory /tmp ?</p> <h3>Tornado Log :</h3> <blockquote> <p>WARNING:root:400 POST /upload (127.0.0.1): Missing argument upfile_path WARNING:root:400 POST /upload (127.0.0.1) 2.31ms</p> </blockquote> <h3>Nginx Error Log :</h3> <blockquote> <p>127.0.0.1 - - [14/Jul/2011:13:14:31 +0530] "POST /upload HTTP/1.1" 400 73 "http://127.0.0.1/" "Mozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/20100101 Firefox/6.0"</p> </blockquote> <h3>More verbose Error Log with Info option:</h3> <blockquote> <p>2011/07/14 16:17:00 [info] 7369#0: *1 started uploading file "statoverride" to "/tmp/0000000001" (field "upfile", content type "application/octet-stream"), client: 127.0.0.1, server: localhost, request: "POST /upload HTTP/1.1", host: "127.0.0.1", referrer: "http://127.0.0.1/"</p> <p>2011/07/14 16:17:00 [info] 7369#0: *1 finished uploading file "statoverride" to "/tmp/0000000001", client: 127.0.0.1, server: localhost, request: "POST /upload HTTP/1.1", host: "127.0.0.1", referrer: "http://127.0.0.1/"</p> <p>2011/07/14 16:17:00 [info] 7369#0: *1 finished cleanup of file "/tmp/0000000001" after http status 400 while closing request, client: 127.0.0.1, server: 0.0.0.0:80</p> </blockquote> <h3>More verbose Error Log with Debug option:</h3> <pre>http://pastebin.com/4NVCdmrj</pre> <p>Edit 1: So, one point that we can infer from the above error log is that, the file is being uploaded by nginx to /tmp but is getting cleaned up subsequently. Don't know why, need help here.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload