AWS ec2上的504网关超时,不执行长PHP脚本
当我试图调用由
PHP编程的GET API时,我多次遇到过http 504网关超时错误.
这是我的服务器和AWS环境. >运行带有apache服务器(2.4.12)的php代码(5.4.40)的Amazon Linux的ec2实例,用于为客户端的api调用服务. 从一些关于504网关超时的文章中,我已经尝试修改这些设置: # ELB idle timeout => 300 # php.ini max_execution_time => 301 max_input_time => 301 # httpd conf MaxKeepAliveRequests => 100 KeepAliveTimeout => 30 但是所有这些对我来说都没有用,有时它仍会得到504网关超时. 我的PHP脚本不是一个很长的脚本,它只是从3个表中获取来自mysql数据库(AWS RDS)的数据并将数据返回给客户端,没有上传文件或生成大文件,所以我认为执行时间不是问题. 奇怪的是,504网关超时错误并不总是发生,大部分时间都是正常的,只是发生了一些,现在,我仍然不明白504错误何时会发生,这真的很奇怪,如果有人能给我一些关于如何解决这个问题的建议,对我来说真的是一个大忙. ===新的更新=== 我刚刚在我的php代码中发现了一个问题,我认为这是带有自动加载问题的命名空间. 我在同一个文件夹中有2个php文件,它意味着2个具有相同命名空间的类 文件: My/Namespace - Class1.php - Class2.php 类和命名空间: 1类 // Class1 namespace MyNamespace; class Class1 { public static function getInstance() { //return... } } 等级2 // Class2 namespace MyNamespace; class Class2 { public static function getInstance() { //return... } public function getClass1Instance() { $class1 = Class1::getInstance(); return $class1; } } 在Class2.php中我尝试调用Class1的静态函数,但我没有添加“use namespace”,所以我将以下行添加到Class2.php use MyNamespaceClass1; 问题解决了!但我仍然不确定为什么我应该在Class2.php中添加“use namespace”,Class1和Class2都在同一个命名空间中,如果我添加“use namespace”,即使它们在同一个命名空间中也是如此? 附:我发现这个命名空间问题,因为当504网关错误发生时,我试图在短时间内多次调用API,并显示php错误消息并告诉我
但有时PHP错误信息显示
希望我提供关于这个问题的足够信息,并感谢所有留下评论或回答我的问题的人,m(_ _)m 解决方法
我建议你看一下ELB的健康检查.
健康检查是未正确配置时看似随机504错误的来源.当ELB认为您的服务器不“健康”时,ELB向最终用户回答504,并且在PHP环境中的任何地方都没有记录504错误,因为它是在ELB中生成的. 见http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-healthcheck.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |