Назад | Перейти на главную страницу

Squid stale-while-revalidate не работает, если max-age = 0

Squid 2.7 всегда достигает бэкэнда, ожидается, что он достигнет бэкэнда, используя stale-while-revalidate, только когда истекает срок кеширования, а не когда клиент запускает max-age = 0.

Сценарий:

<?php

header('Cache-Control: public, max-age=10, stale-if-error=200, stale-while-revalidate=500');
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

sleep(2);
die("OK");

И конфиг сквида:

# http_port public_ip:port accel defaultsite= default hostname, if not provided
http_port 80 accel defaultsite=mydomain.com

# IP and port of your main application server (or multiple)
cache_peer 127.0.0.1 parent 8000 0 no-query allow-miss originserver name=main

# Do not tell the world that which squid version we're running
httpd_suppress_version_string on

# Remove the Caching Control header for upstream servers
header_access Cache-Control deny all
#header_access Last-Modified deny all

# log all incoming traffic in Apache format
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
access_log /usr/local/squid/var/logs/squid.log combined all

cache_effective_user squid

refresh_pattern . 10080 90% 999999 ignore-no-cache override-expire ignore-private

icp_port 0

Решение, описанное здесь: https://stackoverflow.com/questions/12846107/how-to-use-in-squid-2-7-the-3-1-feature-ignore-cc


Что ж, попробовав все альтернативы, я изменил исходный код, чтобы реализовать эту функцию.

Я изменился в Кальмар-2.7-стабильный9 файл src / refresh.c:282:

282:    if (request) {

для

282:    if (request && FALSE) {

В версии 3.X они делают что-то подобное для реализации ignoreCc:

269:    if (request && !request->flags.ignore_cc) {

Сработало как положено.