msec в заголовке
Всем привет. Проксируя запросы на 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
Re: Таймауты proxy pass
Добрый день! 1. В данном случае мы видели содержимое и ответ умещался в один пакет 2. У нас есть метрики на самом бэкенде, где мы засекаем время ответа. в 90% оно составляет меньше <1 мс, в то время как 90 персентиль по логам нжинкса получается 45мс. Не может нджинкс возвращать неправильный upstream_response_time? On 3/25/20 7:09 PM, Evgeniy Berdnikov wrote: > On Wed, Mar 25, 2020 at 09:48:10AM -0400, opan wrote: >> Добрый день. >> >> В продолжение изучения проблемы обнаружили что в логе нжинкса >> upstream_response_time - 41ms, а этот же запрос, если смотреть tcpdump, >> время ответа бэка меньше 1ms: >> >> https://www.dropbox.com/s/04falc2m073jnf5/Screenshot%202020-03-25%2016.38.15.png?dl=0 >> >> >> Как такое может быть? > > Ответ апстрима не обязательно помещается в один пакет, даже если у него > установлен флаг PSH. Если бы отображалось содержимое пакетов, то можно > было бы проверить, передан ли ответ полностью, а при наличии в дампе > ответных ACKов -- утверждать, что ответ получен сервером. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,287425,287480#msg-287480 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Таймауты proxy pass
Добрый день. В продолжение изучения проблемы обнаружили что в логе нжинкса upstream_response_time - 41ms, а этот же запрос, если смотреть tcpdump, время ответа бэка меньше 1ms: https://www.dropbox.com/s/04falc2m073jnf5/Screenshot%202020-03-25%2016.38.15.png?dl=0 Как такое может быть? On 23.03.2020 14:35, Илья Шипицин wrote: > пара моментов > > 1) у вас proxy_pass на https, по крайней мере первоначальный хендшейк может быть долгим (например, если клиент захочет сделать OCSP проверку). выглядит так, как будто у вас > должен быть кипэлайв до бекенда, поэтому это соображение должно касаться только редких запросов > > 2) возможно, у вас работает буферизация запросов-ответов. попробуйте "proxy_buffering off;" и "proxy_request_buffering off;" ? > > пн, 23 мар. 2020 г. в 14:01, opan : > > У нас есть одна площадка, нжинкс принимает запросы и проксирует на бэкенд > через fcgi_pass. В логах нжинса мы видим upstream_response_time 40мс. > Появилась вторая площадка, мы принимаем там трафик и отправляем все на > первую площадку через proxy_pass. Так же логируем здесь > upstream_reponse_time и наблюдаем очень большие значения. Мы ожидали, что > добавится просто летенси между новой и старой площадкой, плюс какие-то > небольшие накладные расходы nginx. Но это не так, в upstream_response_time > мы видим 130-150мс ( в 3.5 раз больше, чем на площадке 1). При этом, если > замерять время запросов от клиента, то total_time курла примерно одинаков > для обоих площадок. Как такое может быть? Почему в логах > upstream_reponse_time больше в 3-4 раза, а время ответа при этом практически > не меняется? > > Вот фрагмент конфигурации, в которой проксируем: > > location = /ххх { > > proxy_cache off; > proxy_redirect off; > proxy_pass_request_body on; > proxy_pass_request_headers on; > proxy_next_upstream off; > proxy_set_header Host $host; > proxy_set_header X-Real-IP $remote_addr; > proxy_pass https://second.domain/xxx; > proxy_http_version 1.1; > proxy_set_header Connection ""; > > } > > Posted at Nginx Forum: https://forum.nginx.org/read.php?21,287422,287422#msg-287422 > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru > > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru Posted at Nginx Forum: https://forum.nginx.org/read.php?21,287425,287456#msg-287456 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Таймауты proxy pass
1. Про ssl верно, мы замеряли сколько времени занимает установка соединения. Это 20-30мс, не больше. 2. Пробовали, не помогает Во всем этом самое странное, что время ответа через прокси и напрямую примерно одинаковое, хотя если верить upstream_response_time оно должно быть сильно больше через прокси. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,287425,287428#msg-287428 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Таймауты proxy pass
У нас есть одна площадка, нжинкс принимает запросы и проксирует на бэкенд через fcgi_pass. В логах нжинса мы видим upstream_response_time 40мс. Появилась вторая площадка, мы принимаем там трафик и отправляем все на первую площадку через proxy_pass. Так же логируем здесь upstream_reponse_time и наблюдаем очень большие значения. Мы ожидали, что добавится просто летенси между новой и старой площадкой, плюс какие-то небольшие накладные расходы nginx. Но это не так, в upstream_response_time мы видим 130-150мс ( в 3.5 раз больше, чем на площадке 1). При этом, если замерять время запросов от клиента, то total_time курла примерно одинаков для обоих площадок. Как такое может быть? Почему в логах upstream_reponse_time больше в 3-4 раза, а время ответа при этом практически не меняется? Вот фрагмент конфигурации, в которой проксируем: location = /ххх { proxy_cache off; proxy_redirect off; proxy_pass_request_body on; proxy_pass_request_headers on; proxy_next_upstream off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass https://second.domain/xxx; proxy_http_version 1.1; proxy_set_header Connection ""; } Posted at Nginx Forum: https://forum.nginx.org/read.php?21,287422,287422#msg-287422 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
server_name_in_redirect?
Добрый день. Есть следующая конфигурация сервера: server { listen 80; ## listen for ipv4 listen 443 default_server ssl; server_name localhost; server_name_in_redirect off; location = /loc { if ($scheme = http) { return 301 https://$server_name$request_uri; } ... Мы ожидаем что все запросы, которые попадают в этот пустой server_name, будут перенаправляться на https://$host/loc/$request_uri, так как есть директива:server_name_in_redirect off; Однако запросы перенаправляются на https://localhost/loc/$request_uri Из документации такое поведение не удалось понять. Можете пояснить, пожалуйста, как правильно пользоваться это директивой? Posted at Nginx Forum: https://forum.nginx.org/read.php?21,286073,286073#msg-286073 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru