Re: msec в заголовке

2022-09-16 Пенетрантность Maxim Dounin
Hello!

On Fri, Sep 16, 2022 at 06:18:53AM -0400, opan wrote:

> Проксируя запросы на fastcgi-бекенд, передаем в одном из заголовков $msec.
> При этом приложение, сравнивая время, полученное в заголовке, и настоящее
> для него, дает аномальный дифф - до 40мс внутри локалки, а иногда и
> отрицательное, до -5мс.
> 
> Внутри локальной сети пакеты бегают быстро - от 1 до 7мс, resolver_timeout
> не задан, ntp на сервере с nginx и бекенде синхронизирован (разница с
> ntp-сервером на каждом из серверов в пределах 1мс).
> 
> Пытаемся разобраться и возник вопрос, какое время в таком случае (при
> прокидывании в заголовке) показывает $msec? Момент получения запроса от
> клиента , момент коннекшна к бекенду, момент соединения с бекендом или еще
> какое-то?

Как уже ответил Сергей, время - на момент формирования заголовков 
запроса к бэкенду, то есть после получения клиентского запроса, но 
до попыток установления соединения с бэкендом (и до резолвинга, но 
в вашем случае его вроде как быть не должно).

Но тут ещё важно учитывать, что время в nginx'е обновляется только 
в начале каждой итерации цикла обработки событий, в момент 
получения из ядра очередной порции событий.  Соответственно если 
какой-то из обрабатываемых в той же итерации запросов пошёл, 
например, на диск - он может легко задержать обработку миллисекунд 
на десять (ибо seek time), а если таких запросов будет два - то и 
на все двадцать, и так далее.  То же относится и к другим 
блокирующимся операциям.

Всё это может давать достаточно большую положительную разницу с 
текущим временем в приложении, даже если собственно установление 
соединения и отправка конкретного запроса произошла быстро.  
Откуда в вашем случае отрицательная разница - вопрос, вероятно, к 
приложению.

-- 
Maxim Dounin
http://mdounin.ru/
___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org


Re: Отсутствует запрос в access логе

2022-09-16 Пенетрантность Igor Savenko
Большое пролетарское спасибо, Максим! Судя по всему, виновником ситуации
был недостаточный размер значения http2_max_field_size директивы (client
exceeded http2_max_field_size limit while processing HTTP/2 connection).
После того, как удвоили значение (до 8к), статус 000 исчез в логе прокси.
Судя по всему, это CloudFlare шлет такие заголовки, но без понижения уровня
логгирования понять это было затруднительно.

вт, 13 сент. 2022 г. в 23:31, Maxim Dounin :

> Hello!
>
> On Tue, Sep 13, 2022 at 01:07:29PM +0300, Igor Savenko wrote:
>
> > Большое спасибо! Да, включен http/2 и на прокси, и на application
> сервере.
> > Но если бы имела место ситуация с закрытием соединения, то прокси должен
> > был бы ругаться в логах первым, а у прокси в error.log все чисто. На
> > application сервере включен rate limit, и я где-то читал, что в старых
> > версиях nginx мог отдавать в логе нули если запросы попали под
> > rate-лимитирование. Воспроизвести, однако, пока не удалось -- ожидаемо
> > отдавался код 503.
>
> Судя по пустому значению $request - заголовки запроса ещё не
> получены от клиента, соответственно до application-сервера такой
> запрос точно ещё не дошёл.  Смотреть имеет смысл только и
> исключительно на proxy, с которого access-лог.
>
> Если в error.log на proxy-сервере при этом всё чисто, то я бы
> начал с проверки установленного уровня логгирования ошибок.
> Обсуждаемые сообщения должны быть на уровне info, то есть они
> достаточно низкоуровневые.  Вероятнее всего уровень логгирования
> установлен выше, и сообщения на уровне info туда просто не
> попадают.
>
> --
> Maxim Dounin
> http://mdounin.ru/
> ___
> nginx-ru mailing list -- nginx-ru@nginx.org
> To unsubscribe send an email to nginx-ru-le...@nginx.org
>
___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org


Re: msec в заголовке

2022-09-16 Пенетрантность Sergey Kandaurov

> On 16 Sep 2022, at 14:18, opan  wrote:
> 
> Всем привет.
> 
> 
> Проксируя запросы на fastcgi-бекенд, передаем в одном из заголовков $msec.
> При этом приложение, сравнивая время, полученное в заголовке, и настоящее
> для него, дает аномальный дифф - до 40мс внутри локалки, а иногда и
> отрицательное, до -5мс.
> 
> Внутри локальной сети пакеты бегают быстро - от 1 до 7мс, resolver_timeout
> не задан, ntp на сервере с nginx и бекенде синхронизирован (разница с
> ntp-сервером на каждом из серверов в пределах 1мс).
> 
> Пытаемся разобраться и возник вопрос, какое время в таком случае (при
> прокидывании в заголовке) показывает $msec? Момент получения запроса от
> клиента , момент коннекшна к бекенду, момент соединения с бекендом или еще
> какое-то?
> 
> Ниже конфигурация локейшна с этой проблемой:
> 
> 
>location = /x {
>uninitialized_variable_warn off;
> 
>set $max_chunk_size 10240;
>set $max_body_size 524288;
>rewrite_by_lua_file /etc/nginx/inflate_body.lua;
>client_body_buffer_size 512k;
> 
>fastcgi_pass x_all;
>fastcgi_keep_conn on;
>fastcgi_next_upstream off;
>fastcgi_pass_request_headers off;
>fastcgi_buffers 16 16k;
>fastcgi_buffer_size 32k;
> 
>fastcgi_param  REQUEST_METHOD $request_method;
>fastcgi_param  CONTENT_TYPE   $content_type;
>fastcgi_param  HTTPS  $https if_not_empty;
>fastcgi_param  REMOTE_ADDR$remote_addr;
>fastcgi_param  REQUEST_RECEIVED_TIME$msec;
[..]

Переменная вычисляется при формировании заголовков запроса на бэкенд.
Это происходит после вычитывания всех заголовков клиентского запроса
и перед первой попыткой установки соединения с бэкендом.

-- 
Sergey Kandaurov

___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org


msec в заголовке

2022-09-16 Пенетрантность opan
Всем привет.


Проксируя запросы на fastcgi-бекенд, передаем в одном из заголовков $msec.
При этом приложение, сравнивая время, полученное в заголовке, и настоящее
для него, дает аномальный дифф - до 40мс внутри локалки, а иногда и
отрицательное, до -5мс.

Внутри локальной сети пакеты бегают быстро - от 1 до 7мс, resolver_timeout
не задан, ntp на сервере с nginx и бекенде синхронизирован (разница с
ntp-сервером на каждом из серверов в пределах 1мс).

Пытаемся разобраться и возник вопрос, какое время в таком случае (при
прокидывании в заголовке) показывает $msec? Момент получения запроса от
клиента , момент коннекшна к бекенду, момент соединения с бекендом или еще
какое-то?

Ниже конфигурация локейшна с этой проблемой:


location = /x {
uninitialized_variable_warn off;

set $max_chunk_size 10240;
set $max_body_size 524288;
rewrite_by_lua_file /etc/nginx/inflate_body.lua;
client_body_buffer_size 512k;

fastcgi_pass x_all;
fastcgi_keep_conn on;
fastcgi_next_upstream off;
fastcgi_pass_request_headers off;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;

fastcgi_param  REQUEST_METHOD $request_method;
fastcgi_param  CONTENT_TYPE   $content_type;
fastcgi_param  HTTPS  $https if_not_empty;
fastcgi_param  REMOTE_ADDR$remote_addr;
fastcgi_param  REQUEST_RECEIVED_TIME$msec;
fastcgi_param  REQUEST_URI$request_uri;
fastcgi_param  QUERY_STRING   $query_string if_not_empty;
fastcgi_param  HTTP_REFERER   $http_referer if_not_empty;
fastcgi_param  USER_AGENT $http_user_agent if_not_empty;
fastcgi_param  HTTP_COOKIE$http_cookie if_not_empty;

fastcgi_connect_timeout 20ms;
fastcgi_read_timeout 75ms;
fastcgi_intercept_errors on;
error_page 500 501 502 503 504 = $failover;

error_log
syslog:server=unix:/var/log/nginx_log_socket,facility=local7,tag=log_err,severity=info
notice;
access_log
syslog:server=unix:/var/log/nginx_log_socket,facility=local7,tag=log_acc,severity=info
;
}

Буду рад советам, спасибо.


--

Олег

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,295224,295224#msg-295224

___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org