2017-10-16 120 views
0

我有清漆緩存服務器。我想只允許三個主機可以清除網址或域名。我用下面的漆配置用於清除的官方網站說:清漆允許從任何IP清除

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 
} 

的問題是,我可以從任何IP地址執行以下curl命令時,清除一個網址:

curl -X PURGE "domain_name.com" 

我只需要清除部分中列出的IP可以從管理端口清除URL 6082不是來自端口80的任何其他IP。任何幫助表示讚賞。

回答

1

我找到了解決我的問題。一個愚蠢的錯誤。我的清漆服務器在代理服務器後面,因此,當我使用「client.ip」檢查允許的IP地址時,所有IP都是127.0.0.1。我刪除ACL清洗和更換下面幾行:

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

這些的:

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.")); 

,現在一切工作就好了。