我可以在 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);
}
我正在使用 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);
}