我可以在 Varnish 4 中创建像 ACL 这样的自定义值列表吗?

Can I create a custom list of values like ACL in Varnish 4?

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

Cookie 字符串:

   session=9urt2jipvkq77brfrf; UserID=158

代码:

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

   sub vcl_recv {

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

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

          return(pass);
      }
   }

简答:否

ACL(访问控制列表)仅用于指定不同IPs/hosts。

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

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

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

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

variable.regset("ttl:d=s,grace:d=s", "^(?:.*,)?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是第二个变量名

</code> & <code> 是对正则表达式

的简单反向引用

:d 指定类型,在本例中为 duration

您的用户列表id:s

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

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

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

     return(pass);
 }