Proxy uploading

Tim Child tim at timc3.com
Thu Jul 29 13:45:50 MSD 2010


Hi,

Currently using Nginx 0.7.65-1 on Ubuntu 10.04. I need to have my application upload files to another backend, so I thought I could use proxy pass, and have a certain URL be proxied to another machine (proxy_pass http://upstreamserver.com:8080/API/import) . The URL would be http//portalvm/API/upload/ that I upload to.

Otherwise proxy to Apache running on 127.0.0.1:8000.

What is happening is that it is indeed proxying but I am getting a 404 error from the upstreamserver.com even though the URL that I am using looks correct. The logs (error.log in Debug mode) are saying:

http proxy header:
"POST /API/import/raw?transferid=unique321&name=p158cr86gf1i34t099c1gkn1vh51.tmp HTTP/1.0^M
Authorization: Basic base64string^M
Host: p upstreamserver.com:8080^M
Connection: close^M
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8^M
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8^M
Accept-Language: en,en-us;q=0.7,sv;q=0.3^M
Accept-Encoding: gzip,deflate^M
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7^M
Content-Type: application/octet-stream^M
RunAs: username^M
INDEX: 0^M
Referer: http://portalvm/my/uploadpage/^M
Content-Length: 2809716^M
Cookie: sessionid=09520e8dfd27d9ee86781b928ed20689^M
Pragma: no-cache^M
Cache-Control: no-cache^M
^M
"


Then there are a lot of logs streaming the file to the upstream server such as:

http upstream request: "/API/import/raw?transferid=unique321&name=p158csbronq6718k215au1ctp1ulo1.tmp"
2010/07/28 17:57:39 [debug] 3950#0: *4 http upstream send request handler
2010/07/28 17:57:39 [debug] 3950#0: *4 http upstream send request
2010/07/28 17:57:39 [debug] 3950#0: *4 read: 9, 0000000000C9B640, 8192, 0
2010/07/28 17:57:39 [debug] 3950#0: *4 chain writer buf fl:0 s:725
2010/07/28 17:57:39 [debug] 3950#0: *4 chain writer buf fl:0 s:345
2010/07/28 17:57:39 [debug] 3950#0: *4 chain writer buf fl:0 s:8192
2010/07/28 17:57:39 [debug] 3950#0: *4 chain writer in: 0000000000C9AD88
2010/07/28 17:57:39 [debug] 3950#0: *4 writev: 9262
2010/07/28 17:57:39 [debug] 3950#0: *4 chain writer out: 0000000000000000

Then at the end::

2010/07/28 17:58:09 [debug] 3950#0: *4 http upstream process header
2010/07/28 17:58:09 [debug] 3950#0: *4 malloc: 0000000000CECF20:4096
2010/07/28 17:58:09 [debug] 3950#0: *4 recv: fd:15 260 of 4096
2010/07/28 17:58:09 [debug] 3950#0: *4 http proxy status 404 "404 Not Found"
2010/07/28 17:58:09 [debug] 3950#0: *4 http proxy header: "X-Powered-By: Servlet/2.5"
2010/07/28 17:58:09 [debug] 3950#0: *4 http proxy header: "Server: Sun GlassFish Enterprise Server v2.1.1"
2010/07/28 17:58:09 [debug] 3950#0: *4 http proxy header: "Content-Type: text/plain"
2010/07/28 17:58:09 [debug] 3950#0: *4 http proxy header: "Content-Length: 57"
2010/07/28 17:58:09 [debug] 3950#0: *4 http proxy header: "Date: Wed, 28 Jul 2010 15:58:09 GMT"
2010/07/28 17:58:09 [debug] 3950#0: *4 http proxy header: "Connection: close"
2010/07/28 17:58:09 [debug] 3950#0: *4 http proxy header done
2010/07/28 17:58:09 [debug] 3950#0: *4 malloc: 0000000000CEDF30:4096
2010/07/28 17:58:09 [debug] 3950#0: *4 HTTP/1.1 404 Not Found^M
Server: nginx/0.7.65^M
Date: Wed, 28 Jul 2010 15:58:09 GMT^M
Content-Type: text/plain^M
Transfer-Encoding: chunked^M
Connection: keep-alive^M
X-Powered-By: Servlet/2.5^M
Content-Encoding: gzip^M



What I can't understand is the headers look correct, and so does the HTTP upstream request URL. In fact if I try and use the same headers and URL in a util that lets me post to the server it creates an empty file.

Any idea on why I am getting a 404?

Thanks,

Tim.




In my nginx.conf I have this (base64string - obviously changed):

http {
    include /etc/nginx/mime.types;
    gzip  on;
    gzip_comp_level 2;
    gzip_proxied any;
    gzip_disable msie6;
    gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    upstream portalvm {
        server 127.0.0.1:8000;
    }

    server {
        listen 80;
                
        location ~ ^/(favicon.ico|robots.txt|sitemap.xml)$ {
            alias /opt/media/$1;
            expires 30d;        
        }
        location /sitemedia {
            alias /opt/media/;
            expires 30d;            
        }
        location /API/import {
           error_log /var/log/nginx/error.log debug;
           client_max_body_size 1000M; 
           proxy_pass http://upstreamserver.com:8080/API/import;
           proxy_hide_header Referer;
           proxy_hide_header Cookie;
           proxy_pass_header Content-Length;
           proxy_set_header Authorization "Basic base64string";
        }
        location / {
            proxy_pass http://portalvm;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;      
            add_header X-Handled-By $upstream_addr;      
        }





More information about the nginx mailing list