我有一个 WordPress 实例,前面有 Varnish,我wp-login.php
使用以下方法阻止通过 VCL 进行访问:
sub vcl_recv {
# block outside access to login
if (req.url ~ "wp-admin" && !client.ip ~ white_list) {
return (synth(404, "Page not found"));
}
}
仅供参考,white_list
这只是一个包含白名单 IP 列表的文件。到目前为止,这已经非常有效了。
我的客户最近请求使用 WordPress 保护页面来创建伪密码保护页面。我发现此方法用于/wp-login.php?action=postpass
验证密码。由于我的白名单阻止了wp-login.php
部分(不是全部,这很奇怪)请求,结果返回 404。
这意味着所有到 的请求/wp-login.php?action=postpass
都应通过,而所有到 的请求wp-login.php
(其中请求 IP 与 不匹配)white_list
都应被拒绝。我一开始的做法是:
sub vcl_recv {
# allow wp protected pages
if (req.url ~ "wp-login" && req.url ~ "\?action\=postpass$") {
return(pass);
} else if (req.url ~ "wp-(admin|login)" && !client.ip ~ white_list) {
return(synth(404, "Page not found"));
}
}
在我看来,这应该可行,但实际上却不行。按原样,此规则允许所有访问,而wp-login.php
不管white_list
。我暂时删除了&& !client.ip ~ white_list
以保持阻止,但我很困惑,为什么该条件部分会评估为 false,而它之前是可以工作的。