У меня есть веб-сайт, который посещают разные мобильные устройства и встроенные устройства.
Довольно часто я сталкиваюсь с проблемой, что некоторые устройства не могут подключиться.
Причины могут быть:
Поскольку устройства находятся в удаленных местах, у них нет легкодоступных журналов, я хотел бы иметь возможность анализировать такие проблемы с помощью журналов nginx.
Я могу сделать это, увеличив уровень журнала ошибок для отладки.
error_log /var/log/nginx/errors_with_debug.log debug;
Однако эти журналы содержат множество вещей, которые меня не интересуют.
Есть ли способ записывать подробную информацию только в том случае, если в ssl-соединении было отказано, но есть нормальный уровень журнала ошибок для всех других случаев?
Пока я включаю debug
ведение журнала, попросите удаленных пользователей, у которых есть проблемы с их устройствами, подключиться и записать трассировки, отключите уровень отладки, перезагрузите nginx и проанализируйте полученные трассировки.
Фактически, мне бы уже помогли, если бы я мог просто зарегистрировать дату и IP-адрес любого клиента, который не смог подключиться из-за проблем с SSL.
В идеале я также хотел бы записать причину, но было бы очень полезно знать, что соединение было предпринято, но не удалось из-за SSL.
А:
B:
error_log syslog: server = unix: /var/log/nginx.sock отладка;
Все упомянутые вами ошибки установления связи SSL регистрируются nginx в info
уровень, поэтому вам не нужно включать отладку.
Вы не упоминаете, какой дистрибутив вы используете, но большинство систем в настоящее время поставляются с SystemD поэтому перенаправляем ваши журналы на стандартную ошибку:
error_log stderr info;
или системный журнал:
error_log syslog:server=/dev/log info;
позволит systemd-journald для сбора всех журналов Nginx и управления их размером. Простой:
journalctl -u nginx.service -a -p info
позволит вам перечислить все сообщения отладки выше info
уровень (при условии, что вы используете системный журнал).
Если вам нужно больше данных для определенных клиентов, вы можете использовать Nginxс debug_connection:
events {
debug_connection 192.0.50.1;
...
}
Как вы упомянули в своем вопросе, установка уровня журнала debug
для всех клиентов обязательно произведет много продукции. Если вам нужно включить отладку, вы можете сделать это на уровне подсистемы. Хотя это не задокументировано в документации журнал ошибок, эта директива принимает также более тонкое подразделение debug
уровень (ср. исходный код): debug_core
, debug_alloc
, debug_mutex
, debug_event
, debug_http
, debug_mail
, debug_stream
. Вас интересует debug_event
уровень, но вы можете добавить несколько в error_log
директива, например:
error_log syslog:server=/dev/log debug_http debug_event;