Я пытался выяснить это, почему это поведение слишком долго, рассмотрим первый файл конфигурации (обрезанный):
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 поведение не определено, иногда оно работает, как ожидалось, а иногда оно будет пересылать запросы, даже если есть задержка проверки. У кого-нибудь есть идеи, почему это поведение?
ТАКЖЕ: В режиме TCP я часто не получаю запись журнала в консоли по запросу сервера, тогда как в режиме HTTP я всегда получаю консоль входа в систему при попадании на сервер
Я полностью убедился, что это не проблема кэширования, она работает абсолютно нормально в режиме http.