Назад | Перейти на главную страницу

Разрешение запросов POST с одного IP-адреса только на NGINX

Можно ли разрешить только одному IP-адресу делать запросы POST и отказывать всем остальным на тех же основаниях на NGINX?

Увидел ответ связанных с этим, но предлагаемое там решение требует, чтобы правило применялось на всем сервере. Мне нужно сделать это на уровне виртуального хоста, не затрагивая другие сайты, размещенные на том же сервере.

В каталоге виртуального хоста создайте файл .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 ).

Таким образом, блок будет выглядеть примерно так (что я не смог проверить):

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

Документы для модуля доступа есть Вот.