I have a website running with nginx and Plack/Starman as upstream. simple configuration looks like:
upstream findmjob { server unix:/tmp/findmjob.sock; } server { listen 80; server_name findmjob.com www.findmjob.com fb.findmjob.com; access_log /findmjob.com/log/access.log; error_log /findmjob.com/log/error.log info; root /findmjob.com/static; location / { try_files $uri @proxy; access_log off; expires max; } location @proxy { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://findmjob; } }
I have some perl code which returns a redirect. it means it works fine under perl/plack:
Faylands-MacbookPro:findmjob.com fayland$ curl -I 'http://findmjob.com:5000/job/GK3bmm+P4RG+2MTa2fVHmw/' HTTP/1.0 301 Moved Permanently Date: Tue, 01 May 2012 06:14:38 GMT Server: HTTP::Server::PSGI Location: http://findmjob.com/freelance/GK3bmm+P4RG+2MTa2fVHmw Server: Perl Dancer 1.3095 Content-Length: 0 Content-Type: text/html; charset=utf-8 X-Powered-By: Perl Dancer 1.3095
as you see it's really with 'http://findmjob.com/'.
but when I use the socks and nginx, it returns something like:
Faylands-MacbookPro:findmjob.com fayland$ curl -I 'http://findmjob.com/job/GK3bmm+P4RG+2MTa2fVHmw/' HTTP/1.1 301 Moved Permanently Server: nginx/0.7.65 Date: Tue, 01 May 2012 06:15:20 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive Location: .com/freelance/GK3bmm+P4RG+2MTa2fVHmw Content-Length: 0 X-Powered-By: Perl Dancer 1.3095
the http://findmjob is dropped, only .com is left?!
any help is really appreciated.
Updated: upgrade to the latest version fixed it.
Faylands-MacbookPro:findmjob.com fayland$ curl -I 'http://findmjob.com/job/GK3bmm+P4RG+2MTa2fVHmw/' HTTP/1.1 301 Moved Permanently Server: nginx/1.2.0 Date: Tue, 01 May 2012 08:22:29 GMT Content-Type: text/html; charset=utf-8 Content-Length: 0 Connection: keep-alive Location: http://findmjob.com/freelance/GK3bmm+P4RG+2MTa2fVHmw X-Powered-By: Perl Dancer 1.3095
Thanks
Best Answer
This is because your upstream defined as 'http://findjob' and default for
proxy_redirect
isAnd this means that nginx will strip string equal to first arg to
proxy_redirect
(http://findjob) from proxiedLocation:
.Use
proxy_redirect off;
instead to fix this issue. Check documentation for details.