使用 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 timeout
和Inactivity 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
AWS Elastic Beanstalk 中的 HTTPS 配置