2013-12-17 5 views
0

나는 http://192.168.x.x에서의 nginx를 실행하는 웹 서버를 가지고 있고, 펄 모듈은 내가 LWP를 사용하여 해당 모듈 내부의 GET 요청을 할 필요가Nginx에 펄 모듈 : 해당 UserAgent

http://nginx.org/en/docs/http/ngx_http_perl_module.html를 사용하여 설치됩니다. 이것은 내가 가지고있는 것입니다 :

my $url = "http://192.168.x.x/app/test.php"; 
my $ua = LWP::UserAgent->new; 
$ua->timeout(5); # muere a los 5 segundos sin respuesta. 
$ua->default_header('Cookie' => "FOO=BAR;PATH=/"); 
my $resp = $ua->get($url); 
if ($resp->is_success) { 
    my $message = $resp->decoded_content; 
    print STDERR "Received reply: $message\n"; 
} else { 
    print STDERR "HTTP GET error code: ", $resp->code, "\n"; 
    print STDERR "HTTP GET error message: ", $resp->message, "\n"; 
}; 

언제나 나는 오류 코드 500 : 읽기 제한 시간을 얻습니다. 하지만 다른 서버를 사용하면 잘 작동합니다. 문제는 내가 스크립트를 실행하는 서버와 동일한 서버를 사용할 때입니다.

+0

왜 PHP 스크립트를 호출합니까? 웹 서버 오류 로그는 어디에 있습니까? 일반적으로 500 번 발생하면 오류 로그에 기록이 남습니다. PHP 스크립트가 펄 통합과 관련이있는 것은 무엇입니까? –

+0

코드 조각은 perl_set 지시문에서 처리기로 사용하는 서브 루틴의 일부입니다. 일부 데이터를 검색하려면 동일한 서버에서 PHP 스크립트를 호출해야합니다. 로그에 오류 메시지가 없습니다 ... ... ( –

답변

2

nginx에는 작업자 스레드가 하나뿐이므로 이것이라고 생각합니다. nginx에서 perl 코드를 호출하면 전체 서버를 차단합니다. 그래서 한 nginx 동시에 펄블 코드와 PHP 처리기를 차단 처리 할 수 ​​없습니다. 이것은 교착 상태입니다. http 응답을 기다리는 동안 Nginx::HTTP을 시도하면 nginx를 차단할 수 없습니다. 그래서 이것은 효과가 있다고 생각합니다.

+0

감사합니다. 이것은 매우 도움이되었습니다. –