首页 > 解决方案 > 通过 PHP 的 cURL 请求导致本地 nginx 服务器超时

问题描述

我试图通过PHP中的cURL获取一些json

$params = array(
    'need' => 'verify',
    'access_token' => '123456789'
);
$paramsString = http_build_query($params);

$json_url = "http://localhost:8888/api/access-token-dummy.php"; 
 
$crl = curl_init();
curl_setopt($crl, CURLOPT_URL, $json_url);
curl_setopt($crl,CURLOPT_POST, count($params));
curl_setopt($crl,CURLOPT_POSTFIELDS, $paramsString);
$json = curl_exec($crl);
curl_close($crl);

$accessArray = json_decode($json, TRUE);

我是504 Gateway Time-Out从 url 获取的,它是本地的,对我来说没有意义。它确实存在并且可以从浏览器访问。但是,我注意到,一旦我尝试通过上述方法请求它作为PHP 7中的cURL请求,所有其他方法也会导致超时(例如,以前工作的浏览器 url 中的刷新现在返回超时)尝试了这个 cURL 请求,但之前没有(当 url 几乎可以立即获取时,正如预期的那样)。

它是一个 nginx 1.13.2 服务器,同时托管发出此请求的 php 和请求 json 的 php url。最重要的是,我在前端的不同端口上有一个反应服务器。我提到这一点是因为我之前可能已经看到过关于这导致某种冲突的参考?

服务器的 CPU 永远不会出现峰值,并且在等待一两分钟后,浏览器就可以访问该 url。它永远无法通过 cURL 命令访问,它总是会创建一个超时并在接下来的一两分钟内阻止其他请求。

请求的 URL 内容似乎无关紧要。我已经重新创建了它,如下所示,它仍然会导致同样的问题:

<?PHP

header('Content-type: application/json;charset=utf-8');

$returnArray = [];
$returnArray['message_user'] = "success";
$returnJSON = json_encode($returnArray);
echo $returnJSON;

?>

Nginx日志不多说但是问题出现后出现如下:

2020/10/22 17:00:23 [error] 52847#0: *49 upstream timed out (60: Operation timed out) while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "POST /api/db-fetchurl.php HTTP/1.1", upstream: "nginxFastCGI.sock", host: "localhost:8888", referrer: "http://localhost:3000/requesturl"

标签: phpnginxcurl

解决方案


推荐阅读