Lurker-Friendly Bans

ban-lurker, asenkron olarak yasak listesinin kontrol edilmesinden ve temizlenmesinden sorumludur. ban-lurker'ın, istek bilgisi eksikliğinden dolayı nesneleri geçersiz kılmak için sınırlı bir kapsamı bulunduğundan bahsettik: ban-lurker sadece obj içeriğini biliyor.

Fakat talep bilgisini req nesnesinden kopyalarsak, aslında Lurker-Friendly ban yazabiliriz. Aşağıdaki VCL kod parçasına bir göz atın:

acl ban {
 "localhost";
 "192.168.55.0"/24;
}

sub vcl_recv {
  if (req.method == "BAN") {
    if (!client.ip ~ ban) {
      return(synth(403, "Not allowed."));
    }
    ban("obj.http.x-host == " + req.http.host + " && obj.http.x-url ~ " + req.url);
    return(synth(200, "Ban added"));
  }
}

sub vcl_backend_response {
  set beresp.http.x-host = bereq.http.host;
  set beresp.http.x-url = bereq.url;
}

sub vcl_deliver {
   unset resp.http.x-host;
   unset resp.http.x-url;
}

İşin püf noktası, nesne önbellekte depolandığında alan adı ve isteğin URL'sini bir header olarak eklemektir.

set beresp.http.x-host = bereq.http.host; isteğin alan adını içeren özel bir x-host başlığı belirleyecek.

beresp.http.x-url = bereq.url; URL'yi özel bir x-url header olarak ayarlayacaktır.

Bu durumda, önbellek geçersiz kılma sadece bir sonraki talep anında gerçekleşmeyecek, aynı zamanda ban-lurker tarafından asenkron olarak da gerçekleştirilecektir. ban-lurker, bir URL eşleşmesini içeren yasak listesindeki yasakları işlemek için gerekli istek bilgilerine sahip olacaktır. ban fonksiyonunda kullandıktan sonra bu özel header değerlerini temizlemeliyiz. Bu vcl_deliver içinde yapılır.

ban-lurker hemen ban listesinden nesne çıkarmaz; bu durumu etkileyen üç parametre vardır:

Last updated