Как использовать список разрешенных адресов Nginx с помощью динамического DNS вместо IP-адреса?

Как использовать список разрешенных адресов Nginx с помощью динамического DNS вместо IP-адреса?

Я использую веб-сервер Nginx на Ubuntu 20.04. В файле конфигурации моего виртуального хоста я установил директиву allow/deny, чтобы заблокировать доступ к URL всем IP, кроме указанного IP. Мои настройки виртуального хоста выглядят так:

server {
    # Restrict access to LAN & Personal IP's
    allow 127.0.0.1; # LoopBack IP Address
    allow 192.168.1.0/24; # LAN IP Address
    allow 123.456.789.102/32; # Home Public IP Address
    allow 111.222.333.444/32; # Work Dynamic IP Address
    deny all;
    error_page 403 =444;
...

Проблема в том, что мои "Рабочие динамические IP-адреса" на самом деле динамические и часто меняются. Так что в течение нескольких дней или около того я смогу получить доступ к веб-странице с моего рабочего IP-адреса 111.222.333.444/32. Но затем, когда рабочий динамический IP-адрес изменится на 555.777.888.999/32, я больше не смогу получить доступ к веб-странице с работы, так как мой рабочий публичный IP-адрес изменился.

На данный момент я настроил свой рабочий IP-адрес с помощью провайдера Dynamic DNS. Поэтому мой динамический DNS-адрес для работы — dansworkip.ddnsfree.com. Я хотел бы включить адрес хоста динамического DNS в список разрешенных Nginx, чтобы при изменении публичного IP-адреса моего рабочего сервера Nginx находил новый IP-адрес в домене dansworkip.ddnsfree.comи помещал его в директиву allow.

Я пробовал что-то вроде этого:

server {
    # Restrict access to LAN & Personal IP's
    allow 127.0.0.1; # LoopBack IP Address
    allow 192.168.1.0/24; # LAN IP Address
    allow 123.456.789.102/32; # Home Public IP Address
    allow dansworkip.ddnsfree.com; # Work Dynamic IP Address
    deny all;
    error_page 403 =444;
...

Но когда я пробую эту конфигурацию, Nginx не запускается, и в моем журнале Nginx появляются следующие ошибки:

[emerg] 10269#10269: invalid parameter "dansworkip.ddnsfree.com" in /etc/nginx/conf.d/www.mysite.com

У меня вопрос: как мне интегрировать динамический DNS в Nginx, чтобы Nginx находил IP-адрес разрешенного домена и добавлял в белый список IP-адрес моего имени хоста динамического DNS?

решение1

Использование IP-адреса в качестве токена аутентификации обычно считается плохой практикой. У Nginx нет функциональности, чтобы достичь того, о чем вы просите. Если бы мне действительно нужно было найти решение проблемы, которую вы поставили, то я бы выбрал решение Алексея, предложенное в комментариях, однако у Nginx есть очень полезная возможность аутентификации/авторизации, которая позволяет вампередать решениена веб-страницу по вашему выбору/дизайну.

Там вы можете использовать любые правила/механизмы аутентификации, которые вы можете закодировать. Вы можете использовать данные сеанса (если ваш выбор инструментов поддерживает это), но учтите, не может ли какой-либо идентификатор сеанса конфликтовать с тем, который реализован приложением, для которого вы предоставляете шлюз.

например, в PHP,

<?php
$ipdir="/var/www/access";
$TTL=600;

function deny_access() 
{
   header('HTTP/1.0 403 Forbidden');
   exit;
}

function permit_access()
{
   print "";
   exit;
}

function refresh_config()
{
   // replace files in "/allow", delete aged files from "/deny"
   // then update timestamp on control file.
   // Implementation left as an exercise for the reader
}

if (time() - filemtime($ipdir . "/control.file") > $TTL) {
    refresh_config();
} 
if (file_exists($ipdir . "/deny", $_SERVER['REMOTE_ADDR'])) {
    deny_access();
} else if (file_exists($ipdir . "/allow", $_SERVER['REMOTE_ADDR'])) {
    permit_access();
} else {

}

Альтернативный подход (который может быть более эффективным на основе множества факторов, но ограничен IP-адресами) заключается в поддержаниипоиск в самом nginx- с ведением списка внешних.

Связанный контент