使用 Elastic Beanstalk 配置 httpd 服务超时

Posted

技术标签:

【中文标题】使用 Elastic Beanstalk 配置 httpd 服务超时【英文标题】:Configure httpd service timeout with Elastic Beanstalk 【发布时间】:2021-09-22 22:06:08 【问题描述】:

简介

我使用 AWS Elastic Beanantstalk 设置了工作环境。它在 Linux 2 AMI 上使用 Apache 代理。 我的工作环境偶尔需要处理运行时间更长的任务(大约 120 秒)。

问题

我注意到持续时间更长的任务会重新发送到 SQS 队列,因此会处理不止一次。 我已经处理了Visibility timeoutInactivity timeout,这样就不会发生这种情况,但问题仍然存在。 在 /var/log/httpd/access_log 检查我的日志后,我注意到 60 秒内出现 504 个错误,告诉我在某个地方又遇到了另一个超时。

黑客解决方案

我可以通过手动更改 /etc/httpd/conf/httpd.conf 中的值并重新启动 httpd 服务,将 httpd 超时从 60 秒增加到 120 秒来解决这个问题。

每次自动缩放或重新启动服务器时,问题仍然会出现。该值被重置为 60 秒。 需要一种通过配置设置超时的方法,这给我带来了实际问题:如何以可维护的方式使用 Elastic Beanstalk 配置 httpd 超时设置?

This article 带我到此为止,但提供的解决方案(使用 .ebextensions)似乎适用于已弃用的 Linux AMI(使用 linux 2)。

我试过的

我已阅读有关配置代理 here 的操作。 我已经尝试了以下所有配置,但似乎根本没有选择配置。

初试:

~/workspace/my-app/
|-- .ebextensions
|   -- ....
|-- .platform
|   `-- httpd
|       `-- conf.d
|           `-- timeout.conf
`-- index.php

.platform/httpd/conf.d/timeout.conf

Timeout 120

已添加 00_reload.config

基于this。

~/workspace/my-app/
|-- .ebextensions
|   -- ....
|-- .platform
|   `-- httpd
|       `-- conf.d
|           `-- timeout.conf
|   `-- 00_reload.config
`-- index.php

.platform/httpd/00_reload.config

container_commands:
   01_reload_httpd:
     command: "service httpd reload"

完全覆盖默认的apache配置

如果可能的话,我不想这样做,因为它会成为维护的噩梦。

~/workspace/my-app/
|-- .ebextensions
|   -- .....
|-- .platform
|   `-- httpd
|       `-- conf
|           `-- httpd.conf
`-- index.php

.platform/httpd/conf/httpd.conf

它是 AWS 提供的默认值的完整副本,但将 Timout 设置更改为 120。

# Managed by Elastic Beanstalk
PidFile /run/httpd.pid

Listen 80
User apache
Group apache
LogLevel warn
TraceEnable off
EnableSendfile on
AddDefaultCharset UTF-8

# Enable TCP keepalive
Timeout 120
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 60

Include conf.modules.d/*.conf
.....

【问题讨论】:

【参考方案1】:

beantalk 似乎假定.platform 文件夹位于项目的绝对根目录。我的位于我的文档根目录中:/public/.platform/

混乱开始是因为文档显示它与.ebextensions 文件夹处于同一级别,该文件夹确实需要位于您的文档根目录中(对我来说是/public)。也没有任何地方提到这一点。

一旦我发现这一点,AWS 的文档就可以完美运行。下面是我的最终配置。

~/workspace/my-app/
|-- public
|   -- .ebextensions
|   -- index.php
|-- .platform
|   `-- httpd
|       `-- conf.d
|           `-- increase_timeout.conf

.platform/httpd/conf.d/timeout.conf

Timeout 120

我希望我的奋斗能对下线的人有所帮助。

【讨论】:

以上是关于使用 Elastic Beanstalk 配置 httpd 服务超时的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Elastic Beanstalk 配置 aws cli 配置文件?

如何使用 CLI 为 Elastic Beanstalk 配置 VPC

如何创建 Elastic Beanstalk 配置文件?

AWS Elastic Beanstalk 中的 HTTPS 配置

使用 Elastic Beanstalk 配置 httpd 服务超时

Elastic Beanstalk (AWS) 的休眠配置