HAProxy, не регистрирующий все запросы

Я имею, устанавливают HAProxy на Ubuntu 14.04, выполняющей отдельный сервер бэкэнда также на Ubuntu 14.04 и Apache2.

При выполнении запросов не зарегистрированы все те запросы. Выполняя HAProxy в режиме отладки это не показывает все запросы на терминале.

У меня есть index.html, который включает изображение. Когда запрос страницы с Google Chrome I видит в инспекторе, что в общих 3 файлах требуются (index.html, header.gif и favicon.ico).

HAProxy однако только зарегистрирует фактический запрос на index.html и если я перезагружу страницу очень быстро, то это даже не зарегистрирует все запросы на index.html.

Я действительно пытался отладить использование socat, но не было никаких ошибок, зарегистрированных через тот путь. Я действительно пытался установить формат журнала на tcplog, но это не помогло также, не, все запросы были зарегистрированы.

Что я делаю неправильно?

конфигурация rsyslogd:

$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514

local0.* -/var/log/haproxy/haproxy.log

& ~

Конфигурация HAProxy:

global
  log 127.0.0.1 local0
  log-send-hostname
  daemon
  maxconn 256
  stats socket    /tmp/haproxy

defaults
  log global
  timeout connect 5000ms
  timeout client 50000ms
  timeout server 50000ms

frontend http-in
  mode http
  option httplog
  # bind to all ip's port 9200
  bind 0.0.0.0:80
  default_backend http-out

backend http-out
  mode http
  balance leastconn
  server web2 xxx.xxx.xxx.xxx:80

журнал haproxy

  Sep 17 14:38:16 front2.xxx.net haproxy[5436]: xxx.xxx.xxx.xxx:61745 [17/Sep/2015:14:38:06.771] http-in http-in/ -1/-1/-1/-1/10000 400 187 - - CR-- 2/2/0/0/0 0/0 ""
  Sep 17 14:38:16 front2.xxx.net haproxy[5436]: xxx.xxx.xxx.xxx:61744 [17/Sep/2015:14:38:06.771] http-in http-out/web2 0/0/1/2/10001 200 23198 - - ---- 1/1/0/0/0 0/0 "GET /index.html HTTP/1.1"
  Sep 17 14:38:26 front2.xxx.net haproxy[5436]: xxx.xxx.xxx.xxx:61746 [17/Sep/2015:14:38:06.772] http-in http-in/ -1/-1/-1/-1/20000 400 187 - - CR-- 0/0/0/0/0 0/0 ""

журнал apache2

  registered.xxx.net:80 185.92.61.11 - - [17/Sep/2015:14:38:06 +0200] "GET /index.html HTTP/1.1" 200 1192 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36"
  registered.xxx.net:80 185.92.61.11 - - [17/Sep/2015:14:38:06 +0200] "GET /header.gif HTTP/1.1" 200 4145 "http://xxx.xxx.xxx.xxx/index.html" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36"
  registered.xxx.net:80 185.92.61.11 - - [17/Sep/2015:14:38:06 +0200] "GET /favicon.ico HTTP/1.1" 200 17861 "http://xxx.xxx.xxx.xxx/index.html" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36"
2
задан 17 September 2015 в 15:44
1 ответ

Со всеми версиями HAProxy до 1.5-dev22, при использовании в режиме http , он работал в "подрежиме" туннеля , если другой "подрежим" не был указан. Я понимаю, что на самом деле в HAProxy нет такого понятия, как "подрежим", но я не знаю, как его еще назвать. В docs просто используется слово 'mode', но я нахожу это еще более запутанным...

В любом случае, в tunnel "sub-mode" обрабатывается только первый запрос и ответ, а все остальное пересылается вообще без анализа. Этот режим не должен использоваться, так как он создает много проблем с протоколированием и HTTP обработкой.

Начиная с 1.5-dev22, "подрежим" по умолчанию был изменен с tunnel на keepve, что означает, что все запросы и ответы обрабатываются, а соединения остаются открытыми, но между ответами и новыми запросами простаивают.

Это можно изменить, используя опцию http-keep-alive, опцию http-tunnel, опцию httpclose, опция http-сервера-close и опция forceclose ключевых слов во фронтах и бэкэндах, при этом эффективный режим (или, при желании, "подрежим") указан в документации. В разделе 4 есть таблица, показывающая эффективный "подрежим", на основе которого устанавливаются опции во фронтенде и бэкэнде, используемые для конкретного соединения.

Для полноты, вот соответствующий раздел документации, включая таблицу, и это различные "подрежимы", как они существовали на момент написания этой статьи (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
1
ответ дан 3 December 2019 в 12:45

Теги

Похожие вопросы