我想对使用自定义标头授权某些关键视图的应用程序进行双重保护。由于这些调用只能来自一些知名 IP,因此我想阻止包含此自定义标头(例如 X-SuperAdminToken)且不是来自白名单 IP 的请求。
就像是:
if ($http_xsuperadmintoken) {
allow 192.168.1.0/24;
allow 10.1.2.3;
deny all;
}
但似乎我不允许将允许指令放在 if 块内:
# nginx -t
nginx: [emerg] "allow" directive is not allowed here in /etc/nginx/sites- enabled/default:44
我还没有找到解决这个问题的方法。
答案1
您可以尝试以下方法。您需要添加自己的具体信息,包括位置块详细信息,但这应该可行
location / {
error_page 412 = @checkip;
recursive_error_pages on;
if ($something) {
return 412;
}
}
location @checkip {
allow 192.168.1.0/24;
allow 10.1.2.3;
deny all;
}
它的作用是检查 $something,如果返回 412 错误,则由 @checkip 块处理,然后我们检查 IP 地址。