I recently had a problem with Dancer not redirecting correctly. I have 2 servers, running dev and live versions of my site NATted behind my router, and redirects from one were being sent to the other incorrectly.
( internet ) Connections come in to my.host.com on one of two ports | | 80 | | 8080 Nothing below this must care about these port numbers | | which makes things fun, as location: headers need them [ NATting router ] | | 80 | | 80 Servers sit on the default port, not knowing what's above +live---+ +----dev+ | nginx | | nginx | location /myapp/ { proxy_pass http://localhost:5001; } |- - - -| |- - - -| | plack | | plack | listens on the default port 5001 | - - - | | - - - | | myapp | | myapp | wants to do a redirect '/home' after a login, say +-------+ +-------+ so I need the :8080 in the urls created on dev
The problem was that I had this in my nginx config for that location:
proxy_set_header X-Forwarded-Host $host;This fail because $host is just the host without the port
The solution was to replace that with this:
proxy_set_header X-Forwarded-Host $http_host;This works because $http_host includes the port, as it is extracted from the HTTP Host: header.
Another hastily constructed page by Phil Carmody
Home / linux / nginx_proxy.html