Welcome! Log In Create A New Profile

Advanced

proxy_cache_background_update

Domrachev Ivan
June 14, 2017 07:54AM
приветствую

если одновременно использовать
sendfile on;
tcp_nopush on;
proxy_cache_background_update on;

то ломается логика работы proxy_cache_background_update: иногда возвращается часть закэщированного варианта,
потом енджайникс ждёт секунд 5 и досылает остаток.
если спрашивать раз в секунду, а proxy_cache_valid any 2s то в логах получается так:
127.0.0.1 127.0.0.1 - [14/Jun/2017:14:27:46 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" MISS 5.123
127.0.0.1 127.0.0.1 - [14/Jun/2017:14:27:47 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" HIT -
127.0.0.1 127.0.0.1 - [14/Jun/2017:14:27:48 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" HIT -
127.0.0.1 127.0.0.1 - [14/Jun/2017:14:27:54 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" STALE -
127.0.0.1 127.0.0.1 - [14/Jun/2017:14:27:55 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" HIT -
127.0.0.1 127.0.0.1 - [14/Jun/2017:14:27:56 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" HIT -
127.0.0.1 127.0.0.1 - [14/Jun/2017:14:28:03 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" STALE -
127.0.0.1 127.0.0.1 - [14/Jun/2017:14:28:04 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" HIT -
127.0.0.1 127.0.0.1 - [14/Jun/2017:14:28:05 +0300] "GET / HTTP/1.1" 200 65536 "-" "Wget/1.16.3 (freebsd10.1)" HIT -
тайминги запросов
5.12 real 0.00 user 0.00 sys
0.10 real 0.00 user 0.00 sys
0.10 real 0.00 user 0.00 sys
5.14 real 0.00 user 0.00 sys
0.10 real 0.00 user 0.00 sys
0.10 real 0.00 user 0.00 sys
5.14 real 0.00 user 0.00 sys
0.10 real 0.00 user 0.00 sys
0.10 real 0.00 user 0.00 sys

если любую из этих опций отключить:
sendfile on;
tcp_nopush on;
то всё нормализуется

конфиг:
worker_processes 2;
pid shared/nginx/pid;
error_log shared/nginx/logs-raw/e.current warn;

events{worker_connections 1024;}

http {
include mime.types;

sendfile on;
tcp_nopush on;

log_format main '$remote_addr $host - [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $upstream_cache_status $upstream_response_time';

access_log shared/nginx/logs-raw/a.current main;

proxy_cache_path shared/nginx/temp/cache levels=1:2 keys_zone=cache:10m;

proxy_cache_use_stale updating;
proxy_cache_valid any 2s;
proxy_cache_background_update on;
proxy_cache cache;

server {
listen *:80;
location / {proxy_pass http://127.0.0.1:1500;}
}

}

запрашивалка
while true;do time wget -q http://127.0.0.1/ -O /dev/null;sleep 1;done

запрашивалка, что бы видить, что часть запроса таки приходит
while true;do time wget -q http://127.0.0.1/ -O -;sleep 1;done

лагающий вебсервер
perl -MIO::All -e 'io(":1500")->fork->accept->(sub{if(/^GET/){sleep(5);$_[0]<"HTTP/1.1 200 OK\nContent-Length: 65536\n\n"."x"x65536}})'

ОС: freebsd 10.1
nginx: 1.13.1

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

proxy_cache_background_update

Domrachev Ivan June 14, 2017 07:54AM

Re: proxy_cache_background_update

Maxim Dounin June 14, 2017 09:54AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 87
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready