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

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

是否可以只允许一个 IP 地址发出 POST 请求,并以相同的理由拒绝 NGINX 上的其他所有人?

看过答案与此相关,但那里提供的解决方案需要在整个服务器范围内应用规则。我需要在虚拟主机级别执行此操作,而不会影响同一服务器上托管的其他网站。

答案1

在您的虚拟主机目录下,创建一个.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;
}

答案2

您需要的答案类似于这个

您还需要另外检查一下帖子,也就是($request_method = POST )

因此该块看起来将类似于以下内容(我还无法测试):

location @location {
  if ($request_method = POST) {
     allow IP;
     deny all;
  }
}

访问模块的文档是这里

相关内容