本地到在线服务器Curl正常,跨在线服务器连5000端口失败求助
问题描述
本地服务器访问在线服务器接口http://xxx.xxx.xx.xxx:5000/api/table/sfuse1运行正常,但从一台在线服务器访问该接口时,出现报错:
Curl failed: Failed to connect to xxx.xxx.xxx.xx port 5000 after 1002 ms: Couldn't connect to server
相关PHP代码如下:
ini_set('display_errors', '1'); ini_set('display_startup_errors', '1'); error_reporting(E_ALL); // require_once('relay.class.php'); // $relay = new relay(); $url = "http://xxx.xxx.xx.xxx:5000/api/table/sfuse1"; // $url = "http://xxx.xxx.xx.xxx:5000/api/table/sfuse1"; $curl = curl_init($url); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $headers = array( "Accept: application/json", ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); //for debug only! curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $resp = curl_exec($curl); if ($resp === FALSE) { die("Curl failed: " . curl_error($curl)); } // var_dump($resp); curl_close($curl); $result = json_decode($resp, true); // // var_dump($result['Content']); // foreach($result['Content'] as $v){ // if($v['code'] == 'MX-MASTER3'){ // var_dump($v); // exit; // } // } // if($result['Content']) var_dump($result['Content']); // foreach($result['Content'] as $row){ // $name_en = $row['code']; // $name_fr = $row['code']; // // $color_code = $row['code']; // $relay->AddColors($name_en,$name_fr,'NULL'); // } // echo "<script> window.location.href='../../relay.php'</script>";
解决建议
- 检查网络连通性:在发起请求的在线服务器上,用
telnet xxx.xxx.xx.xxx 5000或nc -zv xxx.xxx.xx.xxx 5000测试端口是否能连通。如果不通,说明网络层面存在阻断。 - 确认目标服务器端口开放状态:
- 检查目标服务器的防火墙(如
iptables -L、ufw status),确保5000端口允许来自源服务器IP的入站请求。 - 如果是云服务器,检查安全组配置,确认5000端口已添加允许源服务器IP访问的规则。
- 检查目标服务器的防火墙(如
- 验证目标服务监听地址:在目标服务器上执行
netstat -tulpn | grep 5000,确认服务是否监听在0.0.0.0(允许所有IP访问),而不是仅127.0.0.1(仅本地访问)。 - 增强curl调试信息:在PHP代码中添加详细调试配置,获取更精准的失败原因:
$verbose = fopen('curl_debug.log', 'w+'); curl_setopt($curl, CURLOPT_STDERR, $verbose); curl_setopt($curl, CURLOPT_VERBOSE, true); - 检查源服务器出站规则:确认发起请求的在线服务器是否有防火墙或安全组限制出站流量,禁止访问5000端口。
- 确认目标服务状态:在目标服务器上检查服务是否正常运行(如
systemctl status your_service),确保服务没有崩溃或未启动。 - 排查IP正确性:确认代码中使用的目标IP是否准确,避免因IP填写错误导致无法连接。
内容的提问来源于stack exchange,提问作者Abbas Abbas
相关产品推荐
相关产品推荐

