In meinem Varnish 2 Setup habe ich eine Spülung/Block Verbot etwa so:Varnish VCL ersetzen einfach client.ip für req.http.x-forwarded-for
acl purge {
"localhost";
"x.x.x.x"/24;
}
sub vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
return (lookup);
}
if (req.request == "BAN") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
ban("obj.http.x-host == " +req.http.host+" && obj.http.x-url ~ "+req.url);
# Throw a synthetic page so the
# request wont go to the backend.
error 200 "Ban added";
}
}
ich erwarten würde, dass ich konnte einfach ersetzen Sie die client.ip
in den if-Anweisungen für req.http.x-forwarded-for
, aber wenn ich den folgenden Compiler-Fehler auftritt tun:
Message from VCC-compiler:
Expected CSTR got 'purge'
(program line 944), at
('purging-banning.vcl' Line 16 Pos 41)
if (!req.http.x-forwarded-for ~ purge) {
----------------------------------------#####----
Running VCC-compiler failed, exit 1
VCL compilation failed
ich habe Google und Stackoverflow gesucht, aber ich habe nicht eine gute Lösung für mein Problem noch nicht gefunden, oder der Grund, warum req.http.x-forwarded-for
hier nicht an der richtigen Stelle wäre.
Wer kann helfen?
Ihr Beispiel scheint nicht mit dem Fehler übereinzustimmen, Sie scheinen nur "client.ip" zu haben. Jedoch ist nur eine Notiz client.ip ein tatsächliches IP-Objekt, während req.http.x-forwarded-for eine Zeichenfolge ist. Purge ist im Grunde eine Liste von IP-Mappings und ist ein spezielles Varnish-Objekt –
Danke! Interessante Notiz in der Tat :) – vrijdenker