草庐IT

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

coder 2024-04-17 原文

当我尝试调用由 PHP 编程的 GET API 时,我遇到了好几次 http 504 网关超时错误。

这是我的服务器和 AWS 环境。

  • Amazon Linux 的 ec2 实例运行 php 代码 (5.4.40) 和 apache 服务器 (2.4.12) 以服务来自客户端的 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 gateway timeout error 并不是每次都会发生,大部分时间都是正常的,只是有时候会发生,到现在为止,我仍然不明白什么时候会发生 504 error,这真的很奇怪,如果有人可以给我一些关于如何解决这个问题的建议,这对我来说真的是一个很大的帮助。

=== 新更新 ===

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

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

文件:

My/Namespace
  - Class1.php
  - Class2.php

类和命名空间:

1级

// 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 的静态函数,但我没有添加“使用命名空间”,所以我在 Class2.php 中添加以下行

use My\Namespace\Class1;

问题解决了!但是我仍然不确定为什么我应该在 Class2.php 中添加“使用命名空间”,Class1 和 Class2 都在同一个命名空间中,即使它们在同一个命名空间中,我是否应该添加“使用命名空间”?

附注我发现这个命名空间问题是因为当 504 网关错误发生时,我尝试在短时间内多次调用 API,并且出现 php 错误消息并告诉我

"Class1 is not found in Class2.php"

但有时会显示 php 错误信息

"Cannot call a overloaded function in Class2.php, getClass1Instance()"

希望我能就这个问题提供足够的信息,并感谢所有留下评论或回答我问题的人,m(_ _)m

最佳答案

建议你看一下ELB的Health Check。

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

参见 http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-healthcheck.html

关于php - AWS ec2 上的 504 网关超时,没有执行长的 php 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30288032/

有关php - AWS ec2 上的 504 网关超时,没有执行长的 php 脚本的更多相关文章

  1. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  2. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  3. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  4. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  5. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  6. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  7. 没有类的 Ruby 方法? - 2

    大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow

  8. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  9. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

  10. ruby - 没有类方法获取 Ruby 类名 - 2

    如何在Ruby中获取BasicObject实例的类名?例如,假设我有这个:classMyObjectSystem我怎样才能使这段代码成功?编辑:我发现Object的实例方法class被定义为returnrb_class_real(CLASS_OF(obj));。有什么方法可以从Ruby中使用它? 最佳答案 我花了一些时间研究irb并想出了这个:classBasicObjectdefclassklass=class这将为任何从BasicObject继承的对象提供一个#class您可以调用的方法。编辑评论中要求的进一步解释:假设你有对象

随机推荐