HAProxy - ошибка 408 - случайно
Прокси-версия 1.7.9 2017/08/18
Простые запросы GET, сделанные в тегах сценария в файле индекса, отбрасываются случайным образом, и вместо этого возвращается пользовательский html-код ошибки 400 с кодом состояния 200. Иногда 2-3 раза подряд, иногда даже не 30 раз подряд. Кажется, они появляются совершенно случайно. Это js-файлы, обслуживаемые статической конфигурацией бэкэнда узла.
Из журналов сервера, слушающих на бэкэнде, кажется, что запросы не приходят. Доступ к файлу напрямую всегда работает. Доступ к бэкэнду с обходом прокси не воспроизводит проблему.
Поскольку ошибка - это одно из пользовательских сообщений об ошибках, оно должно быть HAproxy. Добавление опции accept-invalid-http-request и option accept-invalid-http-response не решило проблему. Команды администратора socat не показывают никаких ошибок, а статистика не учитывает их в ответах 4xx.
У меня нет идей. У кого-нибудь есть предложения, как проверить, почему это происходит?
Логи включают ---- во все запросы. Таким образом, индексный HTML-файл запрашивает 7-8 файлов в качестве зависимости. Некоторые css, js файлы как запросы GET. Из всех этих запросов иногда один или два файла не обслуживаются, но пользовательская ошибка 408 HTML используется в качестве данных с кодом ответа 200. Этот ответ 200 виден только в браузере, где он говорит Uncaught SyntaxError: Unexpected token <
при попытке разобрать HTML как файл JS. Теперь в журнале через rsyslog эти запросы не отображаются. Серверная часть также не регистрирует эти запросы. Затем, после нажатия кнопки "Обновить", будет отправлен следующий запрос к набору файлов, и если он будет предоставлен по-настоящему, то код для них будет 200. Поскольку я просто продолжаю обновлять страницу, а содержимое не изменяется, все запросы должны отображаться в все журналы, с кодом 304. ...
global
daemon
maxconn 4096
log 127.0.0.1 local2 debug
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
stats socket /var/lib/haproxy/stats
ssl-default-bind-ciphers PROFILE=SYSTEM
ssl-default-server-ciphers PROFILE=SYSTEM
tune.ssl.default-dh-param 2048
ssl-server-verify none
stats socket /var/run/haproxy.stat
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 1s
timeout queue 1m
timeout connect 1s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
option forwardfor
option http-server-close
stats enable
stats uri /stats
stats realm Haproxy\ Statistics
stats auth stat:stat
errorfile 400 /var/www/html/400.html
errorfile 403 /var/www/html/400.html
errorfile 408 /var/www/html/400.html
errorfile 500 /var/www/html/500.html
errorfile 501 /var/www/html/501.html
errorfile 502 /var/www/html/502.html
errorfile 503 /var/www/html/503.html
errorfile 504 /var/www/html/504.html
option accept-invalid-http-request
option accept-invalid-http-response
Я распознаю содержимое файла ошибки 400.html в браузере, когда оно не удается.
1 ответ
Как заметил @Michael-sqlbot, errorfile 408 /var/www/html/408.html
должны быть удалены полностью.
Это не просто проблема Chrome, но быстрый поиск ведет к https://www.haproxy.com/blog/haproxy-and-http-errors-408-in-chrome/