【问题标题】:WordPress on AWS with ECS, EFS and ELB returning 502带有 ECS、EFS 和 ELB 的 AWS 上的 WordPress 返回 502
【发布时间】:2018-06-27 15:14:50
【问题描述】:

我有一个基于 WordPress 4.9.6 的站点,该站点使用 AWS ECS 进行部署,EFS 用于存储 WordPress 的文件。作为数据库,我使用与 AWS Aurora MySQL 5.7 兼容的实例。我还设置了一个应用程序负载均衡器来访问容器化的 WordPress 实例。 (有关以下设置的更多详细信息。)

问题概述

这种设置似乎在大多数情况下都有效。 IE。我可以在网站上提出GET 请求。我可以登录,查看仪表板,并且经常成功更新。我面临的问题是,当我提交更新时,我的更新尝试也经常导致 502 Bad Gateway 响应,即执行POST /wp-admin/post.php

细节

设置

首先,我的数据库实例写入器填充了本地开发数据库的转储。指向站点本身的数据库 URL 条目,例如选项表中的siteurlhome 具有https 的值。

EFS 是使用性能模式通用创建的。我最初尝试使用 Max I/O 模式,但资源建议宁愿使用前一种模式。但是,切换性能模式并没有改变 502 错误的频率。

按照 AWS 的建议(mount 选项 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2),我的 Amazon Linux ECS 集群实例已配置为使用 NFSv4.1 挂载 EFS 卷。

我有一个派生自 official WordPress image 的 Docker 映像,其中我使用我的自定义内容更新了原始映像 /usr/src/wordpress。自定义内容包括 a.o.一个更新的wp_config.php 我在其中设置了$_SERVER['HTTPS']='on';

将我的 ECS 任务定义拼凑在一起,使用我的自定义 Docker 映像,并将我的 EFS 驱动器上的目录作为 Docker 卷安装在 Docker 容器中。这里的底线是,当我使用任务定义创建 ECS 服务时,容器会启动并写入/var/www/html,随后我可以在我的 EFS 驱动器中看到它。这一切看起来都很好。

我的容器化 WordPress 实例随后成功注册到我之前为应用程序负载均衡器设置的目标组中。

然后我可以通过 https 协议访问我的网站。如果我尝试使用 http,我会按计划重定向到 https。我可以打开登录页面。当我登录时,我尝试编辑登录页面。

问题

这是我面临真正问题的地方。通常,但并非总是如此,当我在登录页面上进行更新并单击 Update 按钮时,我会收到对 POST /wp-admin/post.php 请求的 502 Bad Gateway 响应。通常,当我开始编辑并请求 GET /wp-admin/post.php?post=2&action=edit 时,我会得到相同的 502。

当我收到 502 并且没有收到 502 时,我看不到太多模式。我尝试更新文本内容以及将图像添加到登录页面。 502 有时会发生,但并非总是在任何一种情况下发生。

我还试图解决这个问题,因为我怀疑它与 EFS 的使用以及我为测试设置的两个 ECS 实例之间的后续同步问题有关。进行了以下尝试,但没有看到明显的改进。

最后我将 ECS 服务任务的数量从 2 个减少到 1 个,但问题仍然存在。

作为遇到 502 时浏览器控制台中的错误消息,我经常(可能总是)看到以下内容:The character encoding of the HTML document was not declared. The document will render with garbled text in some browser configurations if the document contains characters from outside the US-ASCII range. The character encoding of the page must be declared in the document or in the transfer protocol.

那么,有没有人知道下一步该尝试什么以及在哪里寻找问题原因的迹象?

【问题讨论】:

  • 我遇到了同样的问题,设置几乎相同。我不相信 EFS 卷会导致问题,因为我过去使用弹性 beanstalk 采用了相同的方法,没有 502 问题。当然,完美的问题,反映你自己的问题,似乎永远没有答案...... ;-)

标签: wordpress amazon-web-services amazon-efs


【解决方案1】:

看起来像这样

https://wordpress.org/support/article/editing-wp-config-php/#increasing-memory-allocated-to-php

帮助解决了我的问题,通常会超时的时间段已经停止。 TLDR; 在 Dockerfile 构建过程中,我添加了以下几行

# Copy php.ini Over to Container
COPY php.ini /usr/local/etc/php/
COPY phpinfo.php /var/www/html/wp-admin/
COPY .htaccess /var/www/html

php.ini

upload_max_filesize = 500M
post_max_size = 256M
memory_limit = 256M
max_execution_time = 1800
max_input_time = 180
max_input_vars = 5000

.htaccess

php_value upload_max_file 500M
php_value post_max_size 256M
php_value memory_limit 256M
    

phpinfo.php 这可以通过导航到 /wp-admin/phpinfo.php 来访问 它将为您提供当前 WP 配置的摘要,以查看更改是否已实施,也非常适合故障排除

<?php
phpinfo();
?>

您可以使用 ECR 中内置的新 Container 更新您的任务定义,(不确定您是否已自动执行此操作?)

或者只是通过 Bastion 主机访问 EC2,然后 docker exec -it 并手动编辑文件, 看起来你有一个 EFS,它将是静态的。

这解决了我的超时问题。 告诉我你的进展情况!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 2016-02-21
    • 2021-05-12
    • 2021-01-19
    • 1970-01-01
    • 2017-02-17
    • 2021-01-17
    相关资源
    最近更新 更多