Under your virtual host directory , create an .htaccess file.
You can use rules like this for deny all post requests:
# deny all POST requests
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} POST
RewriteRule .* - [F,L]
</IfModule>
Then allow the whitelist:
# whitelist POST requests
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} !/contact.php [NC]
RewriteCond %{REMOTE_ADDR} !127.0.0.1
RewriteRule .* - [F,L]
</IfModule>
More information on this site
EDIT : for NGINX you can traslate precedent rule with this online tool, for instance:
if ($request_method ~ "POST"){
set $rule_0 1$rule_0;
}
if ($rule_0 = "1"){
return 403;
break;
}
if ($request_method ~ "POST"){
set $rule_0 1$rule_0;
}
if ($remote_addr !~ "127.0.0.1"){
set $rule_0 3$rule_0;
}
if ($rule_0 = "321"){
return 403;
break;
}