Я запускаю установку веб-приложения, работающего на собственном сервере, который находится в моей основной сети вместе со всеми компьютерами нашей компании и парой других серверов.
Мы решили, что хотим добавить базовую аутентификацию 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), и вот что происходит в каждом сценарии:
0.0.0.0/0
Я могу подключиться к странице без учетных данных, как и ожидалось. 78.432.xx.xx/0
(это мой реальный публичный адрес, отредактированный), я могу получить доступ к странице без учетных данных, как и ожидалось.10.8.0.0/24
(это IP-адреса, которые назначаются пользователям при использовании нашей VPN) при подключении к VPN и, следовательно, назначается адрес 10.8.0.5
, при доступе к веб-странице мне предлагается ввести учетные данные, чего я не ожидал.192.168.1.0/24
, при доступе к веб-странице мне предлагается ввести учетные данные, чего я не ожидал. Обратите внимание, что мой локальный IP-адрес 192.168.1.22
. При доступе к странице я вижу это из журналов 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-адрес?