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