У меня есть веб-сайт, работающий с nginx и Plack / Starman в качестве восходящего потока. простая конфигурация выглядит так:
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; } }
У меня есть код Perl, который возвращает перенаправление. это означает, что он отлично работает под 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
как вы видите, это действительно с 'http://findmjob.com/'.
но когда я использую socks и nginx, он возвращает что-то вроде:
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
то http: // findmjob выпадает, остается только .com ?!
любая помощь действительно приветствуется.
Обновлено: исправлено обновление до последней версии.
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
Спасибо
Это потому, что ваш апстрим определен как 'http: // findjob'и по умолчанию для proxy_redirect
является
proxy_redirect http://findjob /;
А это означает, что nginx удалит строку, равную первому аргументу, в proxy_redirect
(http: // findjob) из прокси Location:
.
Использовать proxy_redirect off;
вместо этого, чтобы исправить эту проблему. Проверьте документация для подробностей.