Подтвердить что ты не робот

Как "разрешить с имени хоста" в конфигурации nginx

В настоящее время я делаю это в своем nginx.conf:

allow 1.2.3.4;
deny;

Что я действительно хотел бы сделать, так это:

allow my.domain.name;
deny;

I.e., я хочу, чтобы nginx выполнял поиск записи в файле my.domain.name во время запроса, и если он соответствует IP-адресу, из которого поступает запрос, разрешите его. Однако я не вижу встроенного механизма для этого. У кого-то есть собственный способ сделать это, прежде чем я начну кодировать что-то обычай?

4b9b3361

Ответ 1

В официальном распространении nginx такой функции нет. Beacause может сильно снизить производительность.

Модули сторонних разработчиков http://wiki.nginx.org/3rdPartyModules также не содержат эту функцию.

Ответ 2

ngx_http_rdns_module делает то, что вам нужно: http://wiki.nginx.org/HttpRdnsModule (https://github.com/flant/nginx-http-rdns)

Резюме

Этот модуль позволяет сделать обратный DNS (rDNS) поиск входящего соединения и обеспечивает простой контроль доступа к входящему имени хоста с помощью правил allow/deny (аналогично директивам разрешения/запрета HttpAccessModule, поддерживаются регулярные выражения). Модуль работает с DNS-сервером, определенным стандартной директивой resolver.

Пример

location / {
    resolver 127.0.0.1;

    rdns_deny badone\.example\.com;

    if ($http_user_agent ~* FooAgent) {
        rdns on;
    }

    if ($rdns_hostname ~* (foo\.example\.com)) {
        set $myvar foo;
    }

    #...
}