web-dev-qa-db-ja.com

NGINXでのみ単一のIPアドレスからのPOSTリクエストを許可する

単一のIPアドレスのみがPOST要求を行い、NGINXの同じ理由で他のすべての人を拒否することを許可することは可能ですか?

回答を参照 これに関連していますが、そこで提供されるソリューションでは、サーバー全体にルールを適用する必要があります。同じサーバーでホストされている他のサイトに影響を与えることなく、仮想ホストレベルでこれを行う必要があります。

2
Ali

仮想ホストディレクトリの下に、.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;
}
1
Daniele Licitra

必要な答えは これ に似ています。

さらに、投稿のチェックが必要になります。これは($request_method = POST )

したがって、ブロックは次のようになります(これはテストできませんでした)。

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

アクセスモジュールのドキュメントは ここ です。

0