Você poderia tentar algo nesse sentido. Você precisa adicionar suas próprias informações, incluindo detalhes do bloco de localização, mas isso deve funcionar
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;
}
O que isto faz é verificar o $ algo e se retornar um erro 412, isso é então tratado pelo bloco @checkip, onde nós então verificamos o endereço IP.