【发布时间】: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 条目,例如选项表中的siteurl 和home 具有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 实例之间的后续同步问题有关。进行了以下尝试,但没有看到明显的改进。
- 按照the EFS user guide 的建议添加挂载选项
sync,以避免在ECS 实例上缓存 - 增加Idle timeout of the load balancer
最后我将 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