Upload Issues with Nginx Reverse Proxy

Hey All,

I am using nginx (sweet server) as a reverse proxy in front of some user
content web servers. Nginx redirects them to the right server/port given
information extracted from a database.

Standard form posts work, no problem.

Uploading of files, however, fails. I see the back end /tmp folder being
touched but no temp file being placed.

So here is my nginx.conf snippet on the front end:

worker_processes 4;

error_log /var/log/error.log info;

pid /var/run/nginx.pid;

events {
worker_connections 1024;
use kqueue;
}

http {
include mime.types;
default_type text/html;

sendfile            on;
tcp_nopush          on;
tcp_nodelay         off;

#keepalive_timeout  0;
keepalive_timeout  5;

gzip                on;
gzip_http_version   1.0;
gzip_comp_level     2;
gzip_proxied        any;
gzip_types      text/plain text/html text/css 

application/x-javascript
text/xml application/xml application/xml+rss text/javascript;

map_hash_max_size   2000000;
map $user $valid {
    include         /usr/local/etc/nginx/webusers.txt;
}


server {
    listen       80;
    server_name  .domain.com;

    # Strip leading www. and redirect
    if ( $http_host ~ ^www\.([^\.]+)\.domain\.com ) {
            set $user $1;
            rewrite   ^/(.*)$       http://$user.domain.com/$1

redirect;
break;
}

    # Get username from the hostname
    set $user '-';
    if ( $http_host ~ ^([^\.]+)\.domain\.com ) {
            set $user $1;
    }
    if ( $user = '-') {
            return 404;
    }

    # Get the users port and ads
    set $server $valid;
    if ($server = 'invalid') {
            rewrite ^       http://www.domain.com/invalid.php

redirect;
break;
}

    if ($server = 'TERMINATED') {
            rewrite ^       http://www.daomin.com/terminated.php

redirect;
break;
}

    if ($server = 'SUSPENDED') {
            rewrite ^       http://www.domain.com/suspended.php

redirect;
break;
}

    if ($server = 'RESERVED') {
            rewrite ^       http://www.domain.com/reserved.php

redirect;
break;
}

    log_format  main  '$http_host $remote_addr - $remote_user

[$time_local] $request ’
'“$status” $body_bytes_sent “$http_referer” ’
‘“$http_user_agent” “$http_x_forwarded_for”’;

    access_log  /var/log/access.log  main;

    location / {
            proxy_set_header Host           $host;
            proxy_set_header X-Real-IP      $remote_addr;
            proxy_set_header X-Forwarded-For        $remote_addr;
            proxy_redirect  off;

            # $server comes from the map
            proxy_pass      http://$server$request_uri;

            client_max_body_size    16m;
            client_body_buffer_size 16k;

            proxy_buffering         off;

            proxy_connect_timeout   5;
            proxy_send_timeout      90;
            proxy_read_timeout      120;

            error_page      502 503 504

http://www.domain.com/proxy_timeout.php;

            proxy_pass_header Expires;
            proxy_pass_header Cache-Control;
            proxy_pass_header Last-Modified;
            proxy_pass_header ETag;
            proxy_pass_header Content-Length;

    }

    error_page  404              http://www.domain.com/404.php;
}

}

I have explicitly turned off proxy buffering - they are just passthrough
servers mapping backends into a clean URL space.

Am I missing something obvious?

Tony