Com todas as versões do HAProxy anteriores ao 1.5-dev22, quando usado em mode http
, funcionava no sub-modo tunnel
"se nenhum outro" submodo "fosse especificado. Eu percebo que não há realmente uma coisa como um "sub-mode" no HAProxy, mas eu não sei mais o que chamar. Os documentos usam apenas a palavra 'mode', mas acho isso ainda mais confuso. ..
Em qualquer evento, em tunnel
"sub-modo" apenas a primeira solicitação e resposta são processadas, e todo o resto é encaminhado sem nenhuma análise. Este modo não deve ser usado, pois cria muitos problemas com o log e o processamento HTTP.
A partir de 1.5-dev22, o "submodo" padrão foi alterado de tunnel
para keep alive
, significando que todas as solicitações e respostas são processadas e as conexões permanecem abertas, mas ociosas entre respostas e novas solicitações .
Isso pode ser alterado usando as palavras-chave option http-keep-alive
, option http-tunnel
, option httpclose
, option http-server-close
e option forceclose
nos frontends e backends, com o modo efetivo (ou "sub-mode" se você quiser) sendo descrito nos documentos. Na seção 4, há uma tabela que mostra o "submodo" efetivo com base em quais opções são definidas no frontend e usadas para uma conexão específica.
Para completar, aqui está a seção relevante dos documentos, incluindo a tabela e seus vários "sub-modos", como existe no momento desta escrita (1.5.14):
In HTTP mode, the processing applied to requests and responses flowing over
a connection depends in the combination of the frontend's HTTP options and
the backend's. HAProxy supports 5 connection modes :
- KAL : keep alive ("option http-keep-alive") which is the default mode : all
requests and responses are processed, and connections remain open but idle
between responses and new requests.
- TUN: tunnel ("option http-tunnel") : this was the default mode for versions
1.0 to 1.5-dev21 : only the first request and response are processed, and
everything else is forwarded with no analysis at all. This mode should not
be used as it creates lots of trouble with logging and HTTP processing.
- PCL: passive close ("option httpclose") : exactly the same as tunnel mode,
but with "Connection: close" appended in both directions to try to make
both ends close after the first request/response exchange.
- SCL: server close ("option http-server-close") : the server-facing
connection is closed after the end of the response is received, but the
client-facing connection remains open.
- FCL: forced close ("option forceclose") : the connection is actively closed
after the end of the response.
The effective mode that will be applied to a connection passing through a
frontend and a backend can be determined by both proxy modes according to the
following matrix, but in short, the modes are symmetric, keep-alive is the
weakest option and force close is the strongest.
Backend mode
| KAL | TUN | PCL | SCL | FCL
----+-----+-----+-----+-----+----
KAL | KAL | TUN | PCL | SCL | FCL
----+-----+-----+-----+-----+----
TUN | TUN | TUN | PCL | SCL | FCL
Frontend ----+-----+-----+-----+-----+----
mode PCL | PCL | PCL | PCL | FCL | FCL
----+-----+-----+-----+-----+----
SCL | SCL | SCL | FCL | SCL | FCL
----+-----+-----+-----+-----+----
FCL | FCL | FCL | FCL | FCL | FCL