如何拒绝包含特定标头且不是来自 nginx 中白名单 IP 的请求?

如何拒绝包含特定标头且不是来自 nginx 中白名单 IP 的请求?

我想对使用自定义标头授权某些关键视图的应用程序进行双重保护。由于这些调用只能来自一些知名 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 地址。

相关内容