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-Friendlyban 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:
Parametre
Görevi
ban_lurker_age
banlanmış nesneler kadar en az bu yaşta olmalıdır. Varsayılan değer 60 saniyedir.
ban_lurker_batch
ban-lurker'ın tek bir işlem sırasındaki temizleyeceği yasak sayısı Varsayılan değer 1000 öğedir.
ban_lurker_sleep
Yasaklama yapan kişinin işlemler arasında beklediği saniye miktarı. Varsayılan değer 0,010 saniyedir.