Re: BasicAuth только с определенных IP

Maxim Dounin mdounin на mdounin.ru
Вт Ноя 6 17:57:30 UTC 2018


Hello!

On Tue, Nov 06, 2018 at 05:24:58AM -0500, inkognito0609 wrote:

> Модуль ngx_http_access_module позволяет ограничить доступ для определённых
> адресов клиентов.
> ngx_http_auth_basic_module позволяет ограничить доступ к ресурсам с
> проверкой имени и пароля.
> 
> Можно ли реализовать проверку имени и пароля при условии входа с
> определенных ip адресов?, если да то как?

Есть директива satisfy, она позволяет произвольно комбинировать 
access (allow/deny) и auth_basic.  Подробнее про неё рассказано в 
документации тут:

http://nginx.org/ru/docs/http/ngx_http_core_module.html#satisfy

Поведение по умолчанию - "satisfy all", то есть проверяются 
результаты как allow/deny, так и auth_basic.  То есть для того, 
чтобы доступ был разрешён только с определённых IP-адресов, и при 
этом у пришедших с этих адресов спрашивалась авторизация, 
достаточно написать:

    allow 192.168.0.0/24;
    deny all;
    auth_basic "restricted site";
    auth_basic_user_file /path/to/htpasswd;

При этом nginx сначала проверит IP-адрес, и если доступ с этого 
IP-адреса запрещён - вернёт ошибку.

Если же вдруг я неверно понял вопрос и на самом деле зачем-то 
хочется, чтобы доступ был разрешён всем, но с определённых 
IP-адресов - только с авторизацией, то можно использовать "satisfy 
any", и разрешить доступ от всех адресов, кроме тех, у которых 
нужно спрашивать авторизацию:

    satisfy any;
    deny 192.168.0.0/24;
    allow all;
    auth_basic "restricted site";
    auth_basic_user_file /path/to/htpasswd;

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru