AWS上带有ECS,EFS和ELB的WordPress返回502

时间:2018-06-27 15:14:50

标签: wordpress amazon-web-services aws-elasticfilesystem

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

问题概述

在大多数情况下,此设置似乎确实有效。即我可以在该网站上发出GET请求。我可以登录,查看仪表板,通常可以成功进行更新。我面临的问题是,在我提交更新(即执行POST /wp-admin/post.php)时,我的更新尝试常常会导致 502错误的网关响应。

具体

设置

首先,在我的数据库实例编写器中填充了本地dev数据库的转储。指向网站本身的数据库URL条目,例如选项表中的siteurlhome的值带有https

EFS是用性能模式 General Purpose 创建的。我最初尝试使用 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。自定义内容包括我在其中设置了wp_config.php

的更新后的$_SERVER['HTTPS']='on';

将我的ECS任务定义拼凑在一起使用我的自定义Docker映像,并在Docker容器中将目录作为Docker卷安装在我的EFS驱动器上。底线是,当我使用任务定义创建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有时会出现,但并非总是如此。

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

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

作为遇到502 I时浏览器控制台中的错误消息,我经常(可能总是)看到以下内容: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.

那么,有没有人知道下一步该怎么做以及在哪里寻找问题原因的线索?

1 个答案:

答案 0 :(得分:0)

看起来像这样

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更新您的任务定义,(不确定是否已自动执行此操作?)

或者只是通过堡垒主机访问EC2,然后通过docker exec -it并手动编辑文件, 似乎您拥有一个EFS,它将是静态的。

这有助于解决我的超时问题。 让我知道你走了!