2017-10-16 88 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.")); 

,现在一切工作就好了。