Назад | Перейти на главную страницу

HAProxy - Ошибка 408 - случайно

Версия прокси 1.7.9 18.08.2017

Простые запросы GET, сделанные в тегах сценария в индексном файле, отбрасываются случайным образом, и вместо этого пользовательский HTML-код ошибки 400 возвращается с кодом состояния 200. Иногда 2-3 раза подряд, иногда даже не 30 раз подряд. Вроде появляется совершенно случайно. Это файлы js, обслуживаемые статической конфигурацией серверной части узла.

Из журналов сервера, прослушивающего бэкэнд, кажется, что запросы не приходят. Доступ к файлу напрямую всегда работает. Доступ к бэкэнду с обходом прокси не воспроизводит проблему.

Поскольку ошибка явно является настраиваемым сообщением об ошибке, это должно быть HAproxy. Добавление опции accept-invalid-http-request и опции 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 в браузере, когда он не работает.

Как отметил @ Michael-sqlbot, errorfile 408 /var/www/html/408.html следует удалить полностью.

Это не просто проблема с хромом, но быстрый поиск приводит к https://www.haproxy.com/blog/haproxy-and-http-errors-408-in-chrome/