Re: Объём отданного запроса с учётом SSL- overhead'а
Maxim Dounin
mdounin на mdounin.ru
Ср Дек 13 12:58:56 UTC 2017
Hello!
On Wed, Dec 13, 2017 at 11:15:58AM +0300, Александр Николаев wrote:
> Добрый день.
>
> Есть задача - сохранять в лог-файл полный объём ответа на запросы, как
> минимум с учётом затрат на SSL при HTTPS.
>
> $*bytes_sent* - содержит число байт, переданное клиенту, по HTTP (т.е.
> тело+заголовки), но не учитывает расходы трафик на транспорт (SSL, TCP/IP)
>
> При этом SSL обрабатывается самим nginx'ом и он вполне может иметь
> информацию по объёму переданной информации с учётом SSL overhead'а для
> логирования. Есть идеи (или может быть даже реализации), как получить
> желаемый результат с nginx'ом?
Для работы с SSL nginx использует встроенные в OpenSSL
возможности, и не пытается перехватывать работу с файловым
дескриптором - а, наоборот, отдаёт дескриптор OpenSSL'ю с помощью
функции SSL_set_fd(). Соответственно, информации о том, сколько
байт было записано в SSL-соединение - у nginx'а нет.
Теоретически - такие счётчики есть внутри OpenSSL, нужно добраться
до write BIO на сокете (SSL_get_wbio(), BIO_next()) и попросить
BIO_number_written(). И это наверное даже можно без особых
проблем сделать в модуле, если вам зачем-то нужна такая
функциональность.
Отмечу на всякий случай, что там будут нюансы, связанные с тем,
что извлечь эту инфмормацию можно только в рамках запроса (скажем,
логгируя добавленную модулем переменную), соответственно a) данные
для каждого следующего запроса в том же соединении будут включать
в себя данные для предыдущих запросов, и б) shutdown не попадает
вообще никуда.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru