Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
504 AWS ec2上的网关超时,不执行长php脚本_Php_Apache_Amazon Web Services_Amazon Ec2_Amazon Elb - Fatal编程技术网

504 AWS ec2上的网关超时,不执行长php脚本

504 AWS ec2上的网关超时,不执行长php脚本,php,apache,amazon-web-services,amazon-ec2,amazon-elb,Php,Apache,Amazon Web Services,Amazon Ec2,Amazon Elb,当我试图调用由PHP编程的GETAPI时,我曾多次遇到HTTP504网关超时错误 这是我的服务器和AWS环境 一个使用AmazonLinux的ec2实例,在apache服务器(2.4.12)上运行php代码(5.4.40),为客户端的api调用提供服务 AWS弹性负载平衡器,用于平衡到我的一个实例的流量。(目前,我只有一个实例,如果我需要更多实例来处理流量,请为将来设置ELB。) 用于保存数据的AWS RDS数据库(MySQL 5.6.21) 从一些关于504网关超时的文章中,我已经尝试修改

当我试图调用由PHP编程的GETAPI时,我曾多次遇到HTTP504网关超时错误

这是我的服务器和AWS环境

  • 一个使用AmazonLinux的ec2实例,在apache服务器(2.4.12)上运行php代码(5.4.40),为客户端的api调用提供服务
  • AWS弹性负载平衡器,用于平衡到我的一个实例的流量。(目前,我只有一个实例,如果我需要更多实例来处理流量,请为将来设置ELB。)
  • 用于保存数据的AWS RDS数据库(MySQL 5.6.21)
从一些关于504网关超时的文章中,我已经尝试修改这些设置:

 # ELB
 idle timeout => 300

 # php.ini
 max_execution_time => 301
 max_input_time => 301

 # httpd conf
 MaxKeepAliveRequests => 100
 KeepAliveTimeout => 30
但所有这些都对我没有帮助,有时仍然会出现504网关超时

我的php脚本不是一个长脚本,它只是从mysql数据库(AWS RDS)从3个表中获取数据并返回数据到客户端,没有上传文件或生成大文件,所以我认为执行时间不是问题

奇怪的是504网关超时错误并不总是发生,大部分时间都是正常的,只是偶尔发生,现在我还不知道什么时候会发生504错误,真的很奇怪,如果有人能给我一些解决这个问题的建议,这对我来说真的是一个很大的帮助

==新更新===

我刚刚在我的php代码中发现了一个问题,我认为这是自动加载问题的名称空间

我在同一个文件夹中有两个php文件,这意味着有两个具有相同名称空间的类

档案:

My/Namespace
  - Class1.php
  - Class2.php
类和命名空间:

第一类

// Class1
namespace My\Namespace;
class Class1 {
    public static function getInstance() {
        //return...
    }
}
类别2

// Class2
namespace My\Namespace;
class Class2 {
    public static function getInstance() {
        //return...
    }

    public function getClass1Instance() {
        $class1 = Class1::getInstance();
        return $class1;
    }
}
在Class2.php中,我尝试调用Class1的静态函数,但我没有添加“use namespace”,所以我在Class2.php中添加了以下行

use My\Namespace\Class1;
问题解决了!但是我仍然不确定为什么我应该在Class2中添加“use namespace”。php,Class1和Class2都在同一个名称空间中,即使它们在同一个名称空间中,我应该添加“use namespace”吗

p、 我发现这个名称空间问题是因为当504网关错误发生时,我尝试在短时间内多次调用API,php错误消息显示并告诉我

“在Class2.php中找不到Class1”

但有时会显示php错误消息

无法在Class2.php GetClassInstance()中调用重载函数


希望我能就这个问题提供足够的信息,感谢所有留言或回答我问题的人,我建议你看看ELB的健康检查

健康检查在未正确配置的情况下似乎会产生随机的504错误。当ELB认为您的服务器不“健康”时,ELB会向最终用户回答504,并且该504错误不会记录在PHP环境中的任何位置,因为它是在ELB中生成的


请参见

正常运行需要多长时间?在web套接字之外,长时间运行的请求通常不适合http。如果API正常运行,根据互联网的速度需要200~1000毫秒,我认为这不是长时间运行的请求。您是在fcgi模式下运行php还是在mod_php模式下运行php?您在apache错误日志中看到了与请求相关的任何内容吗?我对fcgi模式和mod_php不是很确定,我试图检查phpinfo(),看到“服务器API”参数是“apache 2.0处理程序”,这是否意味着mod_php?日志看起来很正常。我发现我的php脚本在一个方法中查询数据库18次,这是原因吗?你检查了Apache超时了吗?见:?另外,elastic beanstalk日志中当时没有任何内容吗?发生此错误时,我检查了ELB的运行状况检查,ELB向我显示实例状态为InService,因此我认为它通过了运行状况检查,根据我的经验,如果运行状况检查失败,ELB没有任何实例,则错误应该是“503服务不可用:后端服务器已满负荷”