Nginx Tornado File Upload

akash.gangil nginx-forum at
Thu Jul 14 13:30:01 MSD 2011

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 :

#user  nobody;
worker_processes  1;

error_log  /var/log/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        /var/log/;

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

    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_set_form_field $upload_field_name.content_type
        upload_set_form_field $upload_field_name.path

        # Inform backend about hash and size of a file
        upload_aggregate_form_field “$upload_field_name.md5”
        upload_aggregate_form_field “$upload_field_name.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 {


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.

Can anyone point why is nginx not storing the file at the specified
directory /tmp ?

    Tornado Log : WARNING:root:400 POST /upload ( Missing
argument upfile_path WARNING:root:400 POST /upload ( 2.31ms

    Nginx Error Log : - - [14/Jul/2011:13:14:31 +0530] "POST
/upload HTTP/1.1" 400 73 "" "Mozilla/5.0 (X11; Linux
i686; rv:6.0) Gecko/20100101 Firefox/6.0"

Posted at Nginx Forum:,212377,212377#msg-212377

More information about the nginx mailing list