Предположим, у меня в файле конфигурации nginx есть следующее:
location ^~ /foo/ {
allow 1.2.3.4;
allow 5.6.7.8;
allow 9.10.11.12;
…
allow 99.100.101.102;
deny all;
# rest of directives
}
Если я также хочу ограничить доступ к нескольким другим каталогам, возможно ли это сделать, не создавая еще один блок и снова перечисляя IP-адреса? Меня беспокоит внесение изменений при добавлении и удалении IP-адресов в будущем - я бы не хотел, чтобы каждый блок был обновлен.
Еще лучше была бы директива, которая в основном позволяет мне каким-то образом «включать» список IP-адресов в каждый блок.
Как только я набрал слово «включить» в вопросе выше, у меня в голове закружились колеса.
Оказывается, вы можете просто поставить allow
и deny
директивы во включаемый файл, и они будут работать так, как ожидалось. Лучше всего то, что я могу комбинировать списки IP-адресов, чтобы определенные группы серверов могли получить доступ к одним каталогам, а другие - нет.
У меня это настроено так:
/ и т.д. / nginx / включает / админ-ips
allow 1.2.3.4/32;
allow 1.2.3.5/32;
/ и т.д. / nginx / включает / частные-ips
allow 10.0.0.0/8;
allow 172.16.0.0/12;
allow 192.168.0.0/16;
/ и т.д. / nginx / включает / тестирование-ips
allow 4.5.6.7;
allow 8.9.10.11;
/etc/nginx/conf.d/server.conf
location ^~ /admin/ {
include includes/admin-ips;
deny all;
# rest of directives
}
location ^~ /tools/ {
include includes/admin-ips;
include includes/testing-ips;
include includes/private-ips;
deny all;
# rest of directives
}
location ^~ /tests/ {
include includes/admin-ips;
include includes/testing-ips;
deny all;
# rest of directives
}
Работает как шарм.