Записи журналов доступа Nginx не создаются для некоторых соединений, когда они происходят - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть архитектура веб-сайта следующим образом:

Интернет -> loadbalancer -> webserver / api

Таким образом, в настройке машины балансировщика нагрузки есть nginx в качестве балансировщика нагрузки ина узле веб-сервера / API также есть nginx, работающий как обратный прокси-сервер.Сервер веб-сервера получает запросы от браузеров (через балансировщик нагрузки), обращается к API через HTTP и отображает страницу в браузере.Оба веб-сервера и API являются приложениями nodejs.

В подсистеме балансировки нагрузки nginx есть записи журнала для подключений веб-сервер -> api, но он не регистрирует исходные подключения клиентского браузера -> веб-сервер до тех пор, пока браузер не станетзакрыто (протестировано с Chrome и Firefox).Как будто соединение остается в незавершенном состоянии до полного отключения браузера, после чего записывается запись журнала.

Журналы доступа балансировщика нагрузки nginx:

110.110.110.101 - - [21/Feb/2019:22:21:23 +0000] loadbalancer01 TCP 200 186833 825 0.047 upstream: 10.0.0.100:443
110.110.110.100 - - [21/Feb/2019:22:21:37 +0000] loadbalancer01 TCP 200 24327 3856 21.991 upstream: 10.0.0.100:443 <-- only created after browser is closed
  • 110.110.110.100 - ip клиента, соединяющегося с Chrome / Firefox
  • 110.110.110.101 - открытый интерфейс веб-сервера / узла API
  • 10.0.0.100 - частный интерфейс веб-сервера / узла API

Соединение webserver-> api регистрируется первым, хотя это явно происходит вторым, а соединение client browser-> webserver регистрируется только тогда, когда браузер клиента полностью закрыт.

Есть ли какое-тобуферизация происходит?Я не использую параметр буфера в конфигурации регистрации потокового блока:

log_format combined '$remote_addr - - [$time_local] $hostname $protocol $status $bytes_sent $bytes_received $session_time upstream: $upstream_addr';

access_log /var/log/nginx/access.log combined;

Почему подключение регистрируется только при закрытом браузере?Как я могу убедиться, что начальное соединение регистрируется, когда оно происходит?

[update - добавлена ​​конфигурация журнала, также обратите внимание, что ips были отредактированы]

1 Ответ

0 голосов
/ 25 февраля 2019

Я понял это, сравнив заголовки между подключением браузера и балансировщиком нагрузки по сравнению с подключением, инициированным из сценария.Оказывается, браузеры устанавливают заголовок «Connection: keep-alive», который поддерживает соединение открытым , поэтому несколько запросов могут отправляться с использованием одного и того же соединения.

Полезные команды для запуска этого на балансировщике нагрузкиpublic ip, чтобы увидеть заголовки соединения:

sudo tcpdump -nn -A -s1500 -l -i порт eth0 80

Еще одна вещь, которую стоит отметить, это то, что если вы используете UFW в качестве брандмауэра,он устанавливает базовые правила iptables с ограничениями, поэтому он регистрирует только первые 3 соединения в минуту.

...