Таинственные ошибки Http 408 в AWSasticbeanstalk-access_log
В лог-файле asticbeanstalk-access_log в наших экземплярах AWS EBS содержится 408 ошибок, например:
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:31 +0000] "-" 408 - "-" "-"
172.31.1.56 (-) - - [16/Mar/2016:10:16:59 +0000] "-" 408 - "-" "-"
Они появляются случайным образом, иногда между ними бывает несколько минут, иногда в течение нескольких секунд возникает 4-6 ошибок. Эти ошибки также случаются в нашей непубличной промежуточной среде, когда на сервере отсутствует реальный трафик, поэтому источником этих запросов, вероятно, является собственная служба AWS.
4 ответа
У меня была похожая проблема: код ошибки HTTP 408 на AWS Elastic Beanstalk. Решение, которое я должен был реализовать, чтобы исправить это, изменило порт Instance и протокол на самом Classic LB на 80 и HTTP.
Изначально порты и протоколы были настроены на 443 и HTTPS. Поэтому убедитесь, что для порта экземпляра и протокола установлено значение 80, даже если для порта LB и протокола установлено значение 443 и HTTPS.
РЕДАКТИРОВАТЬ: у вас есть классический балансировщик нагрузки? Перейдите на балансировщик нагрузки приложения, создав новую среду с помощью Elastic Beanstalk cli и выберите балансировщик нагрузки приложения. Это решит эту проблему.
ELB имеет механизм, называемый предварительно открытыми соединениями. ELB делает это так, чтобы ваши запросы могли обслуживаться быстрее, т. Е. Вашим новым запросам не нужно будет ждать в ELB дополнительное время, необходимое для открытия нового соединения с бэкэндом, прежде чем запросы будут отправлены бэкэндам. Если у вас более низкий тайм-аут активности, что приводит к более быстрому закрытию предварительно открытых соединений, что заставит ваш бэкэнд сгенерировать ответ 408 об ошибке, чтобы указать, что соединение было закрыто, потому что истекло время ожидания клиента (ELB) без отправки ELB запроса. на этой конкретной связи.
Если вы изменили тайм-аут простоя ELB-соединения, то вам нужно убедиться, что ваше значение тайм-аута активности HTTP превышает значение тайм-аута простоя ELB. Если это не так, активируйте тайм-ауты поддержки активности и убедитесь, что значение больше, чем тайм-аут простоя подключения ELB.
Вы можете изменить время ожидания keepalive в apache, добавив файл.config в папку ebextensions со следующим кодом:
files:
"/etc/httpd/conf.d/keepalive.conf" :
mode: "000644"
owner: root
group: root
content: |
# Enable TCP keepalive
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 300
<IfModule mod_reqtimeout.c>
RequestReadTimeout header=300 body=300
</IfModule>
Мы столкнулись с той же проблемой, и предложение, сделанное внизу этой ветки форума AWS, решило ее. Короче говоря, вы должны убедиться, что время простоя, настроенное на Elastic Loadbalancer, немного меньше, чем время простоя, настроенное для Apache httpd, работающего на каждом из экземпляров.
Вероятно, это потому, что время ожидания keepalaive экземпляра короче, чем у балансировщика нагрузки. Он должен быть на несколько секунд больше, чем время простоя балансировщика нагрузки, для этого создайте конфигурацию в папке.ebextensions с этим содержимым, заменив "ВАШЕ ВРЕМЯ" на время, большее, чем время ожидания балансировщика нагрузки вашего экземпляра:
files:
"/etc/httpd/conf.d/mod_reqtimeout.conf" :
mode: "000644"
owner: root
group: root
content: |
<IfModule reqtimeout_module>
RequestReadTimeout header=YOUR-TIME,MinRate=500 body=YOUR-TIME,MinRate=500
</IfModule>
Я играл с настройками часов в разных средах, и вот решение:
Когда я отключил "Отключение соединения" в разделе "Конфигурация -> Балансировка нагрузки", ошибки исчезли из журналов.
И вот самое лучшее: когда я снова включил "Слив подключения", ошибки не возвращались!
Таким образом, кажется, что выключение и включение работает на AWS Load-Balancer тоже (не только на Windows...)