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

Добавление исключения в базовую HTTP-аутентификацию nginx, основанную на нахождении в локальной сети

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

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

После первоначальной попытки использовать allow и deny директивы, пользователь Stack Overflow убедил меня вместо этого использовать geo. Я добился прогресса, но столкнулся с неприятной проблемой. Кажется, я не могу сделать исключение для диапазона IP-адресов 192.168.1.1-192.168.1.255.

Чтобы показать, чем я занимаюсь, я добавлю приведенный ниже фрагмент с диапазонами адресов, а затем объясню подробнее.

geo $authentication {
   default "Authentication required";
   127.0.0.1 "off";
   192.168.1.0/24 "off";
   10.8.0.0/24 "off";
   78.432.xx.xx/0 "off";
   0.0.0.0/0 "off"
}

server {
    location / {
        auth_basic $authentication;
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

У меня закомментированы все диапазоны IP-адресов (кроме 127.0.0.1), и вот что происходит в каждом сценарии:

При доступе к странице я вижу это из журналов nginx:

78.432.xx.xx - - [23/Jan/2018:13:58:57 +0000] "GET / HTTP/1.1" 401 195 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0"

Это говорит о том, что nginx правильно определяет мой внешний IP-адрес и запрашивает учетные данные на основе этого, но что запись для внутренних IP-адресов не оказывает никакого влияния. Это подтверждается тем, что если я войду 192.168.1.102 в браузере вместо имени домена я могу получить доступ без учетных данных.

Базовая аутентификация работает, и в некоторой степени управление IP, но я явно делаю что-то не так, но я не могу понять, что это такое.

Вопрос в том, как мне сказать nginx пропустить аутентификацию, если он обнаруживает локальный IP-адрес?