Я настроил балансировщик нагрузки в AWS, который направляет трафик на сервер Apache Ubuntu.
Когда я просматриваю свой URL, иногда все идет хорошо. Затем я нажимаю кнопку «Обновить» и начинаю получать ошибки 502 при загрузке некоторых файлов. Каждый раз это разные файлы.
Затем я снова нажимаю «Обновить», и все становится нормально.
В настоящее время сервером пользуюсь только я.
Мой балансировщик нагрузки настроен следующим образом:
- Зоны доступности: us-east-1a и us-east-1b
- Группы безопасности: открыты порты 80 и 443
- Прослушиватели: порт 80 перенаправляется на порт 443, порт 443 перенаправляется на мою цель
Моя целевая группа сформирована следующим образом:
- Тип цели: экземпляр
- Протокол: HTTP: 80
- Балансировщик нагрузки: Имя моего балансировщика нагрузки
- Регистрация целей: у меня запущено по одному экземпляру в каждой зоне.
Моя группа автоматического масштабирования настроена следующим образом:
- Желаемая вместимость: 2
- Минимальная вместимость: 2
- Максимальная вместимость: 5
- Зоны доступности: us-east-1a, us-east-1b
Мой сервер Apache настроен с использованием значений установки по умолчанию, а также:
- KeepAlive вкл.
- Тайм-аут 120
- KeepAliveTimeout 120
- Макс. запросы KeepAlive 100
- AcceptFilter http нет
- AcceptFilter https нет
Я не серверный парень, я программист, поэтому я действительно не знаю, что проверять. Я думал, что настройка балансировщика нагрузки — это просто...
Спасибо за вашу помощь
ИЗМЕНИТЬ 2020-08-27 15h39
Я включил журналы на VPC и на балансировщике нагрузки и обновил свою страницу. У меня была ошибка 502 на определенном файле.
В журналах балансировщика нагрузки я вижу запись 502 для определенного файла. Вот запись — в формате JSON — в которой я заменил все важные данные
[
{
"type": "h2",
"time": "2020-08-27T19:20:52.547402Z",
"elb": "app/web-server-load-balancer/**my-load-balancer-id**",
"client:port": "*my-ip-address*:60831",
"target:port": "10.0.0.106:80",
"request_processing_time": 0,
"target_processing_time": 0.013,
"response_processing_time": -1,
"elb_status_code": 502,
"target_status_code": "-",
"received_bytes": 45,
"sent_bytes": 610,
"request": "GET https://**my-url** HTTP/2.0",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36",
"ssl_cipher": "ECDHE-RSA-AES128-GCM-SHA256",
"ssl_protocol": "TLSv1.2",
"target_group_arn": "**my-target-group-arn**",
"trace_id": "Root=1-5f480794-150df3bcad7fd0ac6bdfc41c",
"domain_name": "**my-domain-name**",
"chosen_cert_arn": "session-reused",
"matched_rule_priority": 0,
"request_creation_time": "2020-08-27T19:20:52.534000Z",
"actions_executed": "forward",
"redirect_url": "-",
"error_reason": "-",
"target:port_list": "10.0.0.106:80",
"target_status_code_list": "-",
"classification": "-",
"classification_reason": "-"
}
]
Я не знаю, смогут ли эти данные помочь вам мне!
ИЗМЕНИТЬ 2020-08-31 (1)
Я открыл две виртуальные машины в брандмауэре, чтобы получить к ним прямой доступ. Когда я получаю прямой доступ к каждому серверу, я вообще не получаю ошибки 502. Когда я получаю доступ через балансировщик нагрузки, я получаю ошибку 502.
ИЗМЕНИТЬ 2020-08-31 (2)
Я изменил балансировщик нагрузки, чтобы направлять HTTP-трафик на экземпляр, а не перенаправлять его на порт 443.
На порту 80 я не получаю ошибки 502. Я много-много раз выполнял жесткое обновление и не получал 502. Как только я обращаюсь к балансировщику нагрузки по https, я начинаю получать ошибки 502. Я помню, что когда я напрямую обращаюсь к виртуальной машине по https, я не получаю 502.
решение1
Я наткнулся на этот пост на форуме: Форум разработчиков AWS
Последняя запись на самом деле дала мне ответ:
Убедитесь, что вы не используете модуль Apache's event MPM (по умолчанию) за ALB/ELB. Он динамически закрывает соединения. Попробуйте worker MPM.
Я изменил конфигурацию Apache для использования Worker MPM, и, насколько мне известно, у меня не возникло ни одной ошибки 502.
решение2
Я пробовал и рабочие, и событийные MPM, и ни один из них не устранил полностью случайный 502. В конце концов я переключился на prefork MPM, и это решило проблему для меня. Это на Apache посередине между ALB и Tomcat.