Что я хочу
Для меня /админ
местоположение, внести в белый список несколько доверенных IP-адресов и заблокировать всех остальных.
Что у меня есть
http {
карта $remote_addr $admin_block_path {
по умолчанию "/admin";
1.1.1.1 "/не-админ";
8.8.8.8 "/не-админ";
}
# ¦
сервер {
add_header X-Test-Admin "$admin_block_path";
расположение $admin_block_path {
вернуть 403;
}
}
}
Идея состоит в том, чтобы использовать карта
условно определить путь для блокировки с IP-адреса посетителя. Сохраните его в переменной и используйте эту переменную в место расположения
. Если запрос поступает с ненадежного IP, переменная будет содержать /админ
, и поэтому местоположение будет заблокировано /админ
.
В чем проблема
место расположения
не блокирует доступ к /админ
.
- я могу подтвердить с использованием
add_header
что переменная установлена на основе IP-адреса правильно. При посещении с недоверенного IP-адреса я получаю /админ
и соответственно /не администратор
при посещении с доверенного IP.
- Если я заменю
расположение $admin_block_path
с жестко запрограммированным расположение/админ
, запрос блокируется
- Пробовал играть с двойными кавычками, безрезультатно
- Пробовал выносить косую черту за пределы переменной, безрезультатно
Запись
К сожалению, я не могу просто хардкодить позволять
/Отрицать
в некоторые /админ
location, потому что это перезапишет конфигурацию прохода PHP, которую я имею в другом месте в config. Из-за этого мне нужно иметь специальный /админ
location, только если я знаю, что все равно отклоню запрос, и PHP не понадобится.
Версия Nginx: 1.20.1