Мне нужно зарегистрировать размер запроса / ответа (тело + заголовки) в access_log. Есть идеи, как это сделать в nginx? В apache это можно сделать с помощью% I ..% O ...
Взято из ngx_http_log_module:
$bytes_sent
: количество байтов, отправленных клиенту
$connection
: серийный номер подключения
$connection_requests
: текущее количество запросов, сделанных через соединение (1.1.18)
$msec
: время в секундах с точностью до миллисекунд на момент записи журнала
$pipe
: «P», если запрос был конвейерным, «.» в противном случае
$request_length
: длина запроса (включая строку запроса, заголовок и тело запроса)
$request_time
: время обработки запроса в секундах с точностью до миллисекунд; время, прошедшее между чтением первых байтов от клиента и записью журнала после того, как последние байты были отправлены клиенту
$status
: статус ответа
$time_iso8601
: местное время в стандартном формате ISO 8601
$time_local
: местное время в формате общего журнала
Я бы использовал эти 2 параметра в nginx.conf:
log_format perf '$ remote_addr $ status - $ request_length $ bytes_sent'
Согласно документации ( http://wiki.nginx.org/HttpLogModule) $request_length
- это только тело запроса, но я подтвердил, что он включает в себя все заголовки (у меня есть несколько запросов GET с большим количеством файлов cookie, которые в общей сложности имеют более 1400 байт). $bytes_sent
это общее количество байтов, отправленных клиенту (в отличие от $body_sent
который совместим с apache% B).