对同一服务器的Curl请求间歇性超时
我用php开发了一个代理服务,它使用PHPCURL在同一台服务器上请求另一个url。有时它工作得很好,但有时它需要很长时间,而且会超时很多时间 此应用程序不使用会话,因此不能成为锁定的会话问题。在调用curl\u exec之前,我尝试将session\u write\u close()作为一个测试,结果没有什么不同 这种不一致行为的原因是什么?我希望它能立即响应,因为它所做的唯一工作就是提供302个重定向。我已经在下面粘贴了我的代理函数对同一服务器的Curl请求间歇性超时,curl,nginx,php,Curl,Nginx,Php,我用php开发了一个代理服务,它使用PHPCURL在同一台服务器上请求另一个url。有时它工作得很好,但有时它需要很长时间,而且会超时很多时间 此应用程序不使用会话,因此不能成为锁定的会话问题。在调用curl\u exec之前,我尝试将session\u write\u close()作为一个测试,结果没有什么不同 这种不一致行为的原因是什么?我希望它能立即响应,因为它所做的唯一工作就是提供302个重定向。我已经在下面粘贴了我的代理函数 protected function proxy( $pU
protected function proxy( $pURL, $opts = array() ){
$defaults = array(
'headers' => array(),
'follow' => true,
'return' => false,
'return_headers' => false,
'referer' => fp_get_config( 'referer_override' ),
'user_agent' => $_SERVER['HTTP_USER_AGENT'],
'timeout' => 30,
'connect_timeout' => 10,
'fresh_connect' => false
);
$options = array_merge( $defaults, $opts );
extract( $options );
$c = curl_init( $pURL );
curl_setopt_array( $c, array(
CURLOPT_HEADER => $return_headers,
CURLOPT_USERAGENT => $user_agent,
CURLOPT_REFERER => $referer,
CURLOPT_CONNECTTIMEOUT => $connect_timeout,
CURLOPT_TIMEOUT => $timeout,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => $follow,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_FRESH_CONNECT => $fresh_connect,
CURLOPT_AUTOREFERER => true
));
//session_write_close();
$response = curl_exec( $c );
if ( $response === false )
die("Proxy Error: " . curl_error( $c ) );
curl_close( $c );
if ( $return )
return $response;
else {
if ( $return_headers ){
list( $headerblock, $body ) = explode("\r\n\r\n", $response, 2);
$headers = explode("\r\n", $headerblock );
foreach( $headers as $header )
header( $header );
echo $body;
} else
echo $response;
}
exit;
}
事实证明,发生的事情是这样的:我们为高可用性配置了两个负载平衡器。每当一个lb向另一个lb发出curl请求时,它就会被防火墙阻止,从而导致连接超时。修复防火墙规则解决了此问题。事实证明,实际情况是:我们有两个负载平衡器配置为高可用性。每当一个lb向另一个lb发出curl请求时,它就会被防火墙阻止,从而导致连接超时。修复防火墙规则解决了这个问题。我会尝试设置
CURLOPT_MAXREDIRS
我不会让curl在这个特定实例中处理重定向,这意味着$follow总是会为false,因为我要将头直接代理到浏览器。如果这是一个问题,我想它每次都会持续发生,而不是断断续续地发生。您需要提供一些挂起的URL…我会尝试设置CURLOPT\u MAXREDIRS
我不会让curl在这个特定实例中处理重定向,这意味着$follow将始终为false,因为我将直接将标题代理到浏览器。如果这是一个问题,我想它会一直发生在每一次,而不是断断续续的。你需要提供一些挂起的URL然后。。。