3

我正在使用 Varnish 版本 4。我想知道 VCL 是否允许自定义和可重用的值列表,例如ACL. 我想用它来检查访问者的 cookie。如果他是版主,请不要提供缓存内容。

饼干字符串:

   session=9urt2jipvkq77brfrf; UserID=158

代码:

   acl moderator{
       "158";
       "114";
   }

   sub vcl_recv {

      set req.http.UserID = regsub(req.http.Cookie,".*UserID=(\d+).*","\1"); // 158

      if(req.http.UserID ~ moderator){ // 158 found in the moderator list

          return(pass);
      }
   }
4

1 回答 1

4

简短的回答:没有

ACL(访问控制列表)仅用于指定不同的 IP/主机。

但是,您可以使用 VMOD 来完成此操作。结帐变量

它有一些设置和获取变量的基本功能。

set("my_var", "this is the value")
set req.http.x-my-var = get("my_var")

还有一些更高级的功能,例如使用正则表达式从单个字符串设置多个变量。

variable.regset("ttl:d=\1s,grace:d=\2s", "^(?:.*,)?max-age=([0-9]+)(?:+([0-9]+))", beresp.http.Surrogate-Control);
set beresp.ttl = variable.get_duration("ttl");
set beresp.grace = variable.get_duration("grace");

ttl是变量grace的名称,是第二个变量的名称

\1&\2是对正则表达式的简单反向引用

:d指定类型,在本例中为持续时间

您的用户 ID 列表:s

您可以将它们设置为逗号分隔的字符串

set("moderators", ",158,114,") //Notice the starting and ending comma-sign

if(","+req.http.UserID+"," ~ get("moderators")){

     return(pass);
 }
于 2015-12-21T08:52:40.847 回答