我有一个在http://192.168.x.x上运行nginx的Web服务器,并使用http://nginx.org/en/docs/http/ngx_http_perl_module.html安装了一个perl模块
我需要使用LWP在该模块中执行GET请求。这就是我所拥有的:
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 :(得分:2)
我认为这是因为nginx只有一个工作线程。当您在nginx中调用perl代码时,它会阻止整个服务器。所以一个nginx不能同时处理你的阻塞perl代码和php处理程序。这是僵局。您可以尝试在等待http响应时不应阻止nginx的Nginx::HTTP。所以,我认为这会奏效。