如何根据请求 URI 最好地过滤流量?我想做的是some-script.php
在只给出某个参数列表时限制对脚本的访问。例如,允许每个人访问user_info
相关user_id
值,但拒绝每个人访问,action=admin_login
除非他们的 IP 地址在 LAN 上。
我知道这if
是邪恶的,并且allow all
不会如下所示工作,但我似乎无法找到我想要做的事情。
location ~* /live/some-script\.php {
// allow "?action=user_info&user_id=[0-9]{1,6}"
if ($request_uri ~* "action=bwg_frontend_data" ) {
allow all;
}
// deny everyone access to "?action=admin_login", but allow 192.168.100.0/24
if ($request_uri ~* "?action=admin_login.*")
{
allow from 192.168.100.0/24;
}
return 403;
}
您要匹配的不是 $request_uri,而是 $query_string。
$request_uri 在您的情况下是 /live/some-script.php ,而 $args 是之后的一切?(简单的方法来解释它以简化这一点)。我将留下有关您可以在哪里获得帮助的链接,因为我没有足够的声誉,所以无法评论您的帖子。
为了匹配查询字符串:
https://gist.github.com/psd/3884613
Nginx - 基于查询字符串参数的重定向
还有另一种自定义错误的方法,但我有点不喜欢它(如果你愿意,你可以使用它,这是个人意见):
nginx 位置块可以匹配 URL 查询字符串吗?
然后在您的服务器代码中,将 $is_admin 和 $is_user 与 if 匹配。
我只是给你理论上的做法,因为我看不到你的整个配置,只要评论它是否正确,这样我就可以根据你的需要对其进行编辑。我希望这是你所要求的。