У меня есть сайт на основе WordPress 4.9.6, который развернут с помощью AWS ECS, а EFS используется для хранения файлов WordPress. В качестве базы данных я использую экземпляр AWS Aurora MySQL 5.7. Я также настроил балансировщик нагрузки приложения для доступа к контейнерным экземплярам WordPress. (Подробнее о настройке ниже.)
Обзор проблемы
Эта настройка, кажется, работает в большинстве случаев. То есть Я могу делать GET
запросов на сайте. Я могу войти в систему, увидеть панель инструментов и часто успешно обновлять. Проблема, с которой я сталкиваюсь, заключается в том, что мои попытки обновления также часто приводят к ответу 502 Bad Gateway , когда я фиксирую свое обновление, то есть POST /wp-admin/post.php
.
Особенности
Настройка
Сначала моя программа записи экземпляра БД заполняется дампом моей локальной базы данных разработчиков. Записи URL базы данных, указывающие на сам сайт, например siteurl
и home
в таблице параметров, имеют значения с https
.
EFS была создана в режиме производительности общего назначения . Первоначально я пытался с режимом Max I / O , но ресурсы, предлагающие скорее использовать прежний режим. Однако переключение режима производительности не меняет частоту ошибок 502.
Мои экземпляры кластера Amazon Linux ECS подготовлены для подключения тома EFS с использованием NFSv4.1 в соответствии с рекомендациями AWS (mount
options nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2
).
У меня есть изображение Docker, полученное из официального изображения WordPress , в котором я обновляю исходное изображение /usr/src/wordpress
своим собственным контентом. Пользовательский контент включает в себя обновленный wp_config.php
, в котором я установил $_SERVER['HTTPS']='on';
Собирая воедино мои определения задач ECS, использую мой собственный образ Docker и монтирую каталог на моем диске EFS как том Docker в контейнере Docker. Суть в том, что когда я создаю службу ECS с определением задачи, контейнер раскручивается и записывает в /var/www/html
, что впоследствии я вижу на моем диске EFS. Все это выглядит хорошо и прекрасно.
Мои экземпляры WordPress в контейнерах затем успешно регистрируются в целевой группе, которую я ранее настроил для балансировщика нагрузки приложения.
Затем я могу получить доступ к своему сайту по протоколу https. Если я пытаюсь использовать http, я перенаправляюсь на https, как и планировалось. Я могу открыть целевую страницу. Когда я вхожу в систему, я пытаюсь изменить целевую страницу.
Проблема
Здесь я сталкиваюсь с настоящей проблемой. Часто, но не всегда, когда я делаю обновление на целевой странице и нажимаю кнопку Обновить , я получаю ответ 502 Bad Gateway на запрос POST /wp-admin/post.php
. Также часто, когда я начинаю редактировать и запрашивать GET /wp-admin/post.php?post=2&action=edit
, я получаю те же 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.
Итак, кто-нибудь знает, что делать дальше и где искать указания на причину проблемы?