2017-10-16 3 views
0

Ich habe einen Lack-Cache-Server. Ich möchte zulassen, dass nur drei Hosts eine URL oder Domain löschen können. Ich verwende den folgenden Lack Config für wie die offiziellen Websites Spülen sagt:Varnish ermöglichen Purge von allen IPs

backend web_servers { 
     .host = "192.168.1.20"; 
     .port = "80"; 
     .probe = backend_healthcheck; 
    } 


    acl purge { 
      "localhost"; 
      "192.168.1.0"/24; 
      "PUBLIC_IP";    
    }  

    sub vcl_recv { 

     if (req.method == "PURGE") 
      { 
        if (!client.ip ~ purge) 
        { 
          return(synth(405,"Not allowed.")); 
        } 
        return (purge); 
      } 
## Rest of vcl_recv 
} 

Das Problem ist, dass ich eine URL von jeder IP-Adresse löschen können, wenn Sie den folgenden curl Befehl ausführen:

curl -X PURGE "domain_name.com" 

I wollen nur die IP-Adressen im Abschnitt löschen können eine URL von der Admin-Port 6082 Keine anderen IP-Adressen von Port 80 zu löschen. Jede Hilfe wird geschätzt.

Antwort

1

Ich fand die Lösung für mein Problem. Ein dummer Fehler. Mein Lack-Server ist hinter einem Proxy, also sind alle IPs 127.0.0.1, wenn ich "client.ip" verwende, um die erlaubten IP-Adressen zu überprüfen. Ich entfernte ACL Spülung und ersetzt die folgenden Zeilen:

if (!client.ip ~ purge) 
{ 
    return(synth(405,"Not allowed.")); 
} 
return (purge); 

mit diesen diejenigen:

if (req.http.X-Forwarded-For == "PUBLIC_IP, 127.0.0.1" || req.http.X-Forwarded-For == "192.168.1.2, 127.0.0.1") 
{ 
    return (purge); 
} 
return(synth(405,"Not allowed.")); 

und jetzt alles funktioniert gut.