Я хотел бы дважды защитить приложение, которое использует настраиваемый заголовок для авторизации некоторых критических представлений. Поскольку эти вызовы должны исходить только с некоторых хорошо известных IP-адресов, я хотел бы заблокировать запросы, содержащие этот настраиваемый заголовок (скажем, X-SuperAdminToken), а не исходящие с IP-адресов из белого списка.
Что-то вроде:
if ($http_xsuperadmintoken) {
allow 192.168.1.0/24;
allow 10.1.2.3;
deny all;
}
но похоже, что мне не разрешено помещать директиву allow внутри блока if:
# nginx -t
nginx: [emerg] "allow" directive is not allowed here in /etc/nginx/sites- enabled/default:44
Я не нашел для этого обходного пути.
Вы можете попробовать что-нибудь в этом роде. Вам нужно добавить свои собственные особенности, включая детали блока местоположения, но это должно работать
location / {
error_page 412 = @checkip;
recursive_error_pages on;
if ($something) {
return 412;
}
}
location @checkip {
allow 192.168.1.0/24;
allow 10.1.2.3;
deny all;
}
Это проверяет наличие $ something, и если возвращается ошибка 412, это затем обрабатывается блоком @checkip, где мы затем проверяем IP-адрес.