是否有可能只允许一个IP地址发出POST请求,并在NGINX的同一理由上拒绝其他人?
看到与此相关的答案 ,但是提供的解决scheme需要在服务器范围内应用规则。 我需要在虚拟主机级别上执行此操作,而不会影响托pipe在同一服务器上的其他站点。
在您的虚拟主机目录下,创build一个.htaccess文件。
您可以使用这样的规则来拒绝所有发布的请求:
# deny all POST requests <IfModule mod_rewrite.c> RewriteCond %{REQUEST_METHOD} POST RewriteRule .* - [F,L] </IfModule>
然后让白名单:
# 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>
有关本网站的更多信息
编辑:对于NGINX,您可以使用此在线工具来查看先例规则,例如:
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; }
你需要的答案与这个相似。
你会额外需要一个检查后,这将是($request_method = POST ) 。
所以块看起来像下面这样(我还没有testing过):
location @location { if ($request_method = POST) { allow IP; deny all; } }
访问模块的文档在这里 。