Назад | Перейти на главную страницу

Nginx обратный прокси-сервер произвольного каталога в поддомен

В настоящее время мы используем Nginx в качестве обратного прокси-сервера перед несколькими устройствами IOT для доступа к ним из-за пределов нашей внутренней сети. До сих пор я статически сопоставлял местоположение с внутренним IP-адресом каждого устройства.

Мы добавляем несколько устройств, которые используют динамический DNS в качестве http://DeviceName.ServiceName.com но мы хотим, чтобы они появились в виде https://OurDomain.com/DeviceName/ в нашей текущей структуре каталогов вместе с другими устройствами. Этих новых устройств будет много, и я бы предпочел создать динамическое правило, которое будет брать DeviceName из URL-адреса и отправлять запрос на правильное устройство.

Как мне установить переменную из URL-адреса и переписать ее в моем proxy_pass, чтобы я не заканчивал отправку запроса на http://DeviceName.ServiceName.com/DeviceName/

Я пытаюсь следовать формату на https://chrismarslender.com/2014/07/21/url-based-variables-nginx/ и я пробовал:

server {
listen 80;
    server_name OurDomain.com./(?P<DeviceName>)$;
    root /var/www/html/

    location / {
    proxy_pass http://$DeviceName.ServiceName.com;
}

Я оставил HTTPS вне кода, который я опубликовал, но у меня не было проблем с проксированием наших внутренних HTTP-устройств на нашем существующем HTTPS-сайте через Nginx.

Это должно работать:

server {
    listen 80;
    server_name example.com;
    root /var/www/html/;

    location ~ ^/(?:[^/]+)/(?P<path>.+)$ {
        proxy_pass http://$DeviceName.example.net/$path;
    }
}

Я заменил ourdomain.com с участием example.com и ServiceName.com с участием example.net.

Я изменил server_name из вашей версии, поскольку для виртуального прокси-сервера используется только один домен.

в location блок, регулярное выражение берет первую часть нормализованного URI, а затем берет остальную часть URI и сохраняет ее в $path переменная. Это затем используется в proxy_pass место назначения.

Возможно, вам потребуется настроить location регулярное выражение, если у вас есть URL типа http://example.com/device, то есть без последней косой черты.