proxy_cache_revalidate
Andrey Vlasov
nginx-forum at nginx.us
Sun Apr 12 12:19:02 UTC 2015
Добрый день,
Если я правильно понимаю, то при ревалидации данные в кеше должны быть
обновлены (повторно загружены с бекенда), только если они обновились на
бекенде (if-Modified-Since/If-None-Match отличается от Last-modified), но
судя по логам, данные с бекенда берутся в полном объеме, даже если они не
изменились.
example.com -> proxy -> backend
*прокси тут только для статистики трафика, если его исключить, картина не
измениться
proxy_cache_path one levels=1:2 keys_zone=one:10m inactive=24h max_size=1G;
server {
listen 80;
server_name backend;
location / { root /var/www/backend; }
}
server {
listen 80;
server_name example.com;
location / {
proxy_set_header Host backend;
proxy_pass http://unix:/tmp/proxy.sock;
proxy_cache one;
proxy_cache_revalidate on;
proxy_cache_valid 200 1m;
}
}
server {
listen unix:/tmp/proxy.sock;
server_name proxy;
location / {
proxy_pass http://$host;
}
}
backend отвечает файлом index.html размером в 1 мб
лог трафика example.com
request_length:73 bytes_sent:105997 body_bytes_sent:105768 # (MISS)
request_length:73 bytes_sent:591528 body_bytes_sent:591300 # (HIT)
request_length:73 bytes_sent:164076 body_bytes_sent:163840 # (REVALIDATED)
лог трафика proxy
request_length:91 bytes_sent:1048769 body_bytes_sent:1048576 # (MISS)
request_length:175 bytes_sent:4096 body_bytes_sent:3918 # (REVALIDATED)
лог трафика backend
request_length:91 bytes_sent:1048769 body_bytes_sent:1048576 # (MISS)
request_length:175 bytes_sent:1048754 body_bytes_sent:1048576 #
(REVALIDATED)
---------
Из лога видно, что 1 запрос передается на proxy, потом на backend, 2 запрос
отдается с example.com из кеша не затрагивая proxy и как следствие backend
(и не попадает в их логи), а вот 3 запрос … когда идет ревалидация меня
завел в тупик, proxy отправляет example.com 4096 байт, но вот backend
отправляет на proxy полностью весь ответ (1048769)
при ревалидации получается вот так
example.com <-4096- proxy <-1048769- backend
хотя должно быть вот так
example.com <-4096- proxy <-4096- backend
----
в чем тут проблема? как не загружать с бекенда полностью весь ответ (1048769
bytes), а только обновить данные что кеш валидный затратив на это всего 4096
bytes
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,257971,257971#msg-257971
Подробная информация о списке рассылки nginx-ru