2010-07-28 9 views
3

정적 파일의 프런트 엔드 웹 프록시로 nginx를 사용하고 백엔드 웹 서버에 Starman을 사용하여 Catalyst 응용 프로그램을 구현하려고합니다. (아파치 & FastCGI를 사용할 수 있으며 잘 작동하지만, 난 정말 밖으로 다림질 전체 PSGI/Plack 및 Starman 것은 좀하고 싶습니다)uri_for 리디렉션시 포트 번호 포함

Starman 괜찮 시작되고 http://localhost:5000에 잘 내 요청을 처리 할 수 ​​있습니다. 프론트 엔드 프록시로 사용하기 위해 nginx를 실행하면 내 URL은 $c->uri_for 메소드를 사용할 때마다 포트 번호 (5000)와 함께보기 흉하고 복잡해집니다.

예 :

 
$c->uri_for("/login") 
becomes 
http://myapp.example.com:5000/login 
rather than 
http://myapp.example.com/login 

나는 일부 로그 그래서 난 X-Forwarded-HostX-Forwarded-For는 다음과 같이 설정되어 무엇을 볼 수 있습니다 생성되고있다. 정상적인 요청의 경우, nginx에서 오는 값이 설정되지만, $c->uri_for 메쏘드가 사용될 때마다 그 값은 존재하지 않습니다.

이 문제가 발생한 사람이 있습니까?
nginx 또는 Catalyst Catalyst 구성 중 다른 구성이 누락 되었습니까?

감사합니다.

의 nginx의 구성 :

이는 내가 설정 한 MyApp를의 설정에서, 동일한 물리적 서버에서 실행됩니다 불구하고
 
server { 
     listen  80; 
     server_name myapp.example.com; 

     location /static { 
      root /data/users/MyApp/root; 
      expires 30d; 
     } 

     location/{ 
      proxy_set_header Host $host; 
      proxy_set_header X-Forwarded-Host $host; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

      proxy_pass http://localhost:5000/; 
     } 
    } 

이벤트 :

 
MyApp->config(using_frontend_proxy => 1) 

버전 :

 
Catalyst : 5.80024 
nginx : 0.7.67 
Plack : 0.9942 
Starman : 0.2006 

답변

4

내 문제가 내 myapp.psgi 파일에 있습니다. Catalyst::Engine::PSGI에서

Plack::Middleware::ReverseProxy보고 : 프론트 엔드가 다른 호스트에 있던 내 경우

... 
use Plack::Builder; 
use MyApp; 

MyApp->setup_engine('PSGI'); 
my $app = sub { MyApp->run(@_) }; 

builder { 
enable_if { $_[0]->{REMOTE_ADDR} eq '127.0.0.1' } 
     "Plack::Middleware::ReverseProxy"; 
$app; 
}; 
1

MyApp->config(using_frontend_proxy => 1) 

이 차이를 만들했고, 문제를 해결 추가.

+0

이 내용은 https://metacpan.org/pod/Catalyst#PROXY-SUPPORT에 문서화되어 있으며 Catalyst에 내장되어 있으므로 승인 된 대답이어야하며 생성 된'.psgi' 파일을 수정할 필요가 없으며 로컬 설정으로 설정하십시오. –