我在运行apache(php)的同一台服务器上创建了一个由PM2管理的NodeJS API。
对于我来说,我需要将proxyPass
命令添加到000-default.conf文件中:
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
<Location /node_api>
ProxyPass http://127.0.0.1:3569
ProxyPassReverse http://127.0.0.1:3569
</Location>
我的代码运行完美,如果我要访问php,我只需输入服务器的IP,如果要访问Node中的API,则只需使用服务器的IP + /node_api
。
就我而言,PHP需要向节点API发送CURL请求并保存结果,因此我在下面创建了此命令:
$chNodePrintDesktop = curl_init('http://THE_IP_OF_MY_SERVER/node_api/requestdata/');
curl_setopt($chNodePrintDesktop, CURLOPT_HEADER, 0);
curl_setopt($chNodePrintDesktop, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($chNodePrintDesktop, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($chNodePrintDesktop, CURLOPT_TIMEOUT, 0);
curl_setopt($chNodePrintDesktop, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($chNodePrintDesktop, CURLOPT_POSTFIELDS, "urlsite=http://stackoverflow.com");
$dataNodePrintDesktop = curl_exec($chNodePrintDesktop);
curl_close($chNodePrintDesktop);
echo $dataNodePrintDesktop;
该代码运行良好,并从API返回预期结果。但是有一个问题...当相同的代码由php通过以下代码在后台模式下执行时:
exec("php {$filePath} > /dev/null &");
CURL返回代理错误( 502代理错误):
代理服务器从上游服务器收到无效响应。 代理服务器无法处理请求 POST / node_api / requestdata /。原因:从远程读取错误 服务器
我的问题是,当我尝试通过服务器上的URL运行CURL时为什么不返回此错误?为什么当同一代码在后台模式下运行时,我收到代理错误消息?
注意:值得一提的是,我在本地服务器(wampserver)上测试了CURL代码,并在此代码上完美地返回了结果(没有任何代理错误)
我该如何解决?