2015-02-11 2 views
1

У меня есть много доменных имен. настроенных как виртуальные хосты в nginx. Все они имеют одинаковый корень документа. Я хочу ограничить доступ к огромному количеству разных ip. Есть ли способ сделать это на самом высоком уровне, а затем в настройках виртуальных хостов? Например, в главном блоке http {}.Запретить доступ к нескольким доменам в том же каталоге

ответ

0

Да, вы можете использовать ngx_http_geo_module, чтобы заблокировать определенные IP-адреса от доступа к вашим виртуальным хостам. Этот модуль помогает создавать переменные со значениями на основе IP-адреса клиента. Вы можете определить IP-адреса на уровне http. Вот пример.

http { 

    geo $spamers { 
      # --allow all -- 
      default no; 
      #-- block these bad ips -- 
      192.0.171.118 spam; 
      192.0.179.119 spam; 
      192.0.179.120 spam; 
      192.128.168.0/20 spam; 
    } 

Вы можете добавить столько IP-адреса, которые вы хотите, а затем в местоположении блоков серверов, которые вы хотите, чтобы ограничить этот IP-адрес, вы можете добавить проверку

location ~* /mysite/www/ { 
    if ($spamers = spam) { 
     # -- Return a forbidden message 
     return 403; 
    } 
+0

Спасибо за ответ. Это требует той же работы, что и я. Я добавил все плохие ips в файл, в простые директивы deny, а затем включил этот файл в блоки местоположения в каждой конфигурации виртуального хоста. Мне было любопытно, можно ли это сделать, не касаясь конфигураций виртуальных хостов. – Weirdei

+0

Вы должны добавить эти правила во все серверные блоки (вам не нужно писать в каждом блоке местоположения). Поведение nginx по умолчанию заключается в том, что когда приходит запрос, он сопоставляет поля заголовка запросов «Host» с вашими определенными виртуальными серверами. Таким образом, запрос будет напрямую отправляться на этот серверный блок. – dev0

Смежные вопросы