nginx changes the hostname of proxy_pass into ip address unwantedly

Maxim Dounin mdounin at mdounin.ru
Wed Dec 2 16:05:15 UTC 2015


Hello!

On Tue, Dec 01, 2015 at 08:42:43PM -0500, willchu at gmail.com wrote:

> I have configured nginx to use mod_zip to zip up multiple files.
> 
> I also have configured nginx so that it proxies to s3 when our server gets a
> request to /images.
> 
> location /p/ {
>     proxy_pass http://bucket-name.s3.amazonaws.com;
> }
> When I access a file via < server >/images/foo.png, everything works great.
> 
> However, when I try using mod_zip, the http://bucket-name.s3.amazonaws.com
> gets rewritten to an ip address
> 
> http://54.231.176.194:80/foo.png
> 
> S3 needs the bucket-name in the url and gives me a NoSuchBucket error when I
> try using the ip address
> 
> I get the following error
> 
> 2015/12/01 01:37:08 [error] 14955#0: *16 mod_zip: a subrequest returned 400,
> aborting... while reading response header from upstream, client:
> 172.31.10.100, server: convoygarage.com, request: "GET /api/get_zipfile
> HTTP/1.1", subrequest: "/p/foo.png", upstream: "http://
> 54.231.176.194:80/foo.png", host: "convoygarage.com"
> 
> Why is nginx or mod_zip rewriting the hostname portion of my s3 URL into an
> ip address?

Note that "upstream" as logged to error log shows an IP address of 
a particular server used, not a host name used in the request.  
This is intentional behaviour to make it easy to debug which 
backend server caused an error.

To find out what was in fact sent in the Host request header 
you'll have to look into debugging log (or use tcpdump to see what 
is actually sent though the wire).

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx mailing list