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/

Другие вопросы по тегам