2013-12-17 2 views
0

У меня есть веб-сервер, работающий на Nginx http://192.168.x.x и модуль Perl устанавливается с помощью http://nginx.org/en/docs/http/ngx_http_perl_module.htmlNginx Perl модуль с LWP :: UserAgent

мне нужно сделать запрос GET внутри этого модуля с помощью LWP. Это то, что у меня есть:

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-скрипт для интеграции с perl? –

+0

этот фрагмент кода является частью подпрограммы, которую я использую в качестве обработчика в директиве perl_set. Мне нужно вызвать php-скрипт на том же сервере, чтобы получить некоторые данные. В журнале нет ошибки msg ... :( –

ответ

2

Я думаю, что это потому, что у nginx есть только один рабочий поток. Когда вы вызываете свой код perl внутри nginx, он блокирует весь сервер. Таким образом, один nginx не может обрабатывать ваш блокирующий Perl-код и обработчик php одновременно. Это тупик. Вы можете попробовать Nginx::HTTP, который не должен блокировать nginx во время ожидания ответа HTTP. Я думаю, это будет работать.

+0

спасибо, это было очень полезно. –

Смежные вопросы