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