Динамические бэкенды с HAProxy

См. статью Building Secure ASP.NET Applications: Аутентификация, Авторизация и Безопасная Коммуникация.

Это даст Вам лучшее понимание идентификационных данных, используемых Вашим приложением ASP.NET при исполнении роли. Дайте необходимое разрешение, и Вы хороши.

HTH

3
задан 15 January 2019 в 00:46
1 ответ

Самым легким решением было бы просто использование DNS для отображения foo.cust.mydomain.example к определенному IP сервера, как womble предложенный. Это пропустило бы весь прокси-сервер. Возможно, это не возможно для Вас, например, если у Вас нет общедоступных IP-адресов для серверов бэкэнда.

Направление всех запросов к одному серверу (с подстановочным знаком DNS) и затем передача запросов динамично согласно заголовку Хоста немного более сложны, и кажется, что HAProxy не может сделать этого, потому что каждый сервер бэкэнда должен быть явно определен в конфигурации HAProxy.

Nginx, тем не менее, отличается с правильной конфигурацией, Nginx может использовать заголовок Хоста для выбора бэкенда. Nginx нужен сервер DNS, который отображает имена к адресам бэкенда, конечно.

Вот небольшой пример конфигурации:

server {
    listen 80 default;

    location / {
        # You might need to send some headers to the backend server
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;

        resolver 192.0.2.1; # DNS server IP
        # Forward all requests to the backend server using $http_host
        # (this is the 'Host:' header value)
        proxy_pass http://$http_host$request_uri;
    }
}

Это перенаправляет http://myserver.cust.mydomain.example/foo/ кому: http://myserver.cust.mydomain.example/foo/. Не кажется очень полезным на первый взгляд. Но если Вы настраиваете частный сервер DNS, который отображается, те имена к серверу бэкэнда обращается, запрос на самом деле передается к корректному серверу бэкэнда на частном адресе.

Но, этот вид настройки сервера DNS не мог бы быть желаем и мог вызвать проблемы в некоторых случаях. Так, с некоторыми дополнениями к конфигурации Nginx мы можем проявить другой подход:

location / {
    # headers...

    resolver 192.0.2.1;

    # A regex to get the first part (hostname) from the Host header
    if ($http_host ~* "([a-z0-9-]+)(\.[a-z0-9-]+)*") {
        # Save a captured part from the regex to a variable
        set $redirect_hostname $1;
        # Pass the request to a desired backend
        proxy_pass   http://$redirect_hostname.private.mydomain.example$request_uri;
    }
}

Теперь перенаправление идет от http://myserver.cust.mydomain.example/foo/ кому: http://myserver.private.mydomain.example/foo/. Сервер DNS может содержать частные адреса под другим доменом, и proxy_pass директива может быть изменена для соответствия желаемой конфигурации сервера имен.

Я все еще думаю, что этот вид проксирования не мог бы быть самым легким способом решить целое изображение, но это - одна возможность, в конце концов. Я счастлив, если это имело какую-либо справку.

Ссылки: Nginx Wiki, особенно HttpProxyModule и HttpRewriteModule

10
ответ дан 3 December 2019 в 04:54

Теги

Похожие вопросы