Простой пример HAProxy не работает - почему? - PullRequest
0 голосов
/ 15 февраля 2020

Я пытался выяснить это, почему это поведение слишком долго, рассмотрим первый файл конфигурации (обрезанный):

defaults
    log     global
    mode    http
    option tcplog
    timeout connect 5s
    timeout client 5s
    timeout server 5s

frontend www
    bind :2376
    tcp-request inspect-delay 100ms
    acl headertest hdr(sessionid) -i test
    tcp-request content accept if headertest
    tcp-request content reject
    default_backend servers

Это работает безупречно, я могу отправлять запросы на это HAProxy, как это:

fetch('http://localhost:2376', { headers: { 'Cache-Control': 'no-cache', 'sessionid': 'test' } })

И это работает, если sessionid действительно test и завершается неудачей, если sessionid является чем-то еще, точно так же, как ожидаемое поведение.

Теперь, если режим меняется на tcp вместо http, поведение очень странное

Рассмотрим этот файл:

defaults
    log     global
    mode    tcp
    option tcplog
    timeout connect 5s
    timeout client 5s
    timeout server 5s

frontend www
    bind :2376
    tcp-request inspect-delay 100ms
    acl headertest hdr(sessionid) -i test
    tcp-request content accept if headertest
    tcp-request content reject
    default_backend servers

Только http изменен на tcp, больше ничего изменено в конфигурации. Теперь в режиме TCP поведение не определено, иногда оно работает, как ожидалось, а иногда оно будет пересылать запросы, даже если есть задержка проверки. У кого-нибудь есть идеи, почему это поведение?

enter image description here

ТАКЖЕ: В режиме TCP я часто не получаю запись журнала в консоли по запросу сервера, тогда как в режиме HTTP я всегда получаю консоль входа в систему при попадании на сервер

Я полностью убедился, что это не проблема кэширования, она работает абсолютно нормально в режиме http.

...