仅在NGINX上允许来自单个IP地址的POST请求

是否有可能只允许一个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; } } 

访问模块的文档在这里 。