Что я хочу
Для меня /админ местоположение, внести в белый список несколько доверенных 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