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:
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.
Last updated
Was this helpful?