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

Как разрешить определенные IP-адреса для URL-адреса (не каталога!) В Nginx

Я пытаюсь запретить доступ к определенному URL-адресу на нашем сайте, работающем на Nginx, но разрешить его с определенных IP-адресов, я пытался возиться с использованием Location, но, похоже, это просто попытка найти правильный каталог, а не URL-адрес.

Это то, что я придумал, но просто возвращает 404.

location /specificurl {
       root /var/www/site1.com/current;
       allow 123.123.123.123;
       deny all;
       }

Вы пытаетесь вернуть ошибку 404 для всех IP, кроме указанного? Используйте директиву error_page с параметром «= 404». Вроде, как бы, что-то вроде ...

location /specificurl {
   root /var/www/site1.com/current;
   allow 123.123.123.123;
   deny all;

   error_page 403 =404 /404.html;

}

http://nginx.org/en/docs/http/ngx_http_core_module.html#error_page

Кроме того, можно изменить код ответа на другой, например:

error_page 404 =200 /empty.gif;

Или что-то вроде ...

location /specificurl {
   root /var/www/site1.com/current;
   allow 123.123.123.123;
   deny all;

   error_page 403 = @goaway;

}

location @goaway {
    return 444;
}

Мне удалось решить это самому, и вот как:

    set $deny_access off;

    if ($remote_addr !~ (123.123.123)) {
            set $deny_access on;
    }
    if ($uri ~ "^/(specificurl)$" ) {
            set $deny_access on$deny_access;
    }
    if ($deny_access = onon) {
            return 444;
    }

В блоке местоположения и в следующей строке

try_files $uri $uri/ /index.php?q=$uri&$args;

Так будет как

location /index.php/admin {
   try_files $uri $uri/ /index.php?q=$uri&$args;
   allow 123.123.13.124;
   deny all;
{

В моем случае это сработало. Это может сработать для вас.