连接到AWS EC2的PHP网站卷曲在超时失败

时间:2018-01-13 17:36:11

标签: php amazon-web-services curl amazon-ec2

我有一些真正的麻烦到底。

问题

我有一个在AWS EC2端口8080上运行的简单Web服务,需要连接到它并从cPanel主机上托管的网站上传文件。

cPanel站点上的客户端使用PHP curl命令进行连接:

$file = fopen($targetFilePath, 'r');

// Connecting to website.
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 86400); // 1 Day Timeout
curl_setopt($ch, CURLOPT_INFILE, $file);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($targetFilePath));
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cache-Control: no-cache", "Content-Type: $mimeType"));
$response = curl_exec($ch);
$err = curl_error($ch);
$httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close ($ch);

但我总是收到一个无用的错误:

  

发生错误:无法连接到ec2-xx-xx-xx-xx.eu-west-1.compute.amazonaws.com端口8080:连接超时

将卷曲设置为详细,我刚刚得到

时没有帮助
  
      
  • 尝试xx.xx.xx.xx ...
  •   
  • TCP_NODELAY设置
  •   
  • 连接到xx.xx.xx.xx端口8080失败:连接超时
  •   
  • 无法连接至ec2-xx-xx-xx-xx.eu-west-1.compute.amazonaws.com端口8080:连接已超时
  •   
  • 关闭连接0
  •   

对于此故障排除,我已将AWS安全组中所需的端口打开到所有IP,因此不应阻止连接。一旦我开始工作,我会再次锁定它。

我尝试过的事情

  • 客户端只有一个简单的卷曲,只有同一服务器的URL参数 - 相同错误
  • 上述简单的google.co.uk致电 - 工作正常
  • 完全相同的PHP网站和卷曲代码,但在我的localhost上 - 工作正常
  • 如上所述将curl设置为详细 - 没什么用处

总而言之,问题只存在于客户端和服务器的这种特定组合上。其他客户端可以正常使用服务器,麻烦的客户端上的网站可以很好地连接到其他目的地。

由于AWS安全组允许所有TCP流量进入,因此它真正令人头疼!

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您必须确保本地curl客户端从命令行连接到远程服务点,然后返回响应。

消息Connection timed out表示您未连接到该服务。该服务未运行,或者服务端口被防火墙或安全组设置阻止。

试试这个:

  1. 在实例或ELB安全组上向世界打开端口8080.

  2. 在实例应用程序防火墙上向世界打开端口8080。 (!)

  3. 在实例上使用命令行curl以确保正在运行。

  4. 忘记客户端代码,直到命令行测试工作。