Как объединить сквозной проход nginx с функциями ssl-preread и reverse-proxy? - PullRequest
0 голосов
/ 14 января 2019

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

Я хочу заархивировать следующую ситуацию:

 https://app1.app.com ──► pass-through encrypted tcp to :10001
 https://app2.app.com ──► pass-through encrypted tcp to :10002
 https://app3.app.com ──► serve ssl, reverse-proxy to http://ip:10003

Таким образом, не разрывая зашифрованное соединение из приложений 1 и 2, nginx должен пересылать tcp-пакеты. Сертификаты будут обслуживаться самими приложениями. Определение имени хоста работает с ssl_preread.

Но к Приложению 3 можно получить доступ только через http, поэтому nginx должен обслуживать сам сертификат и передавать все от определенного имени хоста app3.app.com до незашифрованного Backend.

У меня есть рабочая конфигурация для первых двух ситуаций, и я могу настроить третью ситуацию, но не могу понять, как объединить эти две в одной конфигурации nginx.

Что у меня так далеко:

user www-data;
worker_processes  1;

load_module /usr/lib/nginx/modules/ngx_stream_module.so;

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    keepalive_timeout  65;
}

stream {
    map $ssl_preread_server_name $name {
        app1.app.de app1;
        app2.app.de app2;
        default default;
    }

    upstream app1 {
        server 127.0.0.1:10001 max_fails=3 fail_timeout=10s;
    }

    upstream app2 {
        server 127.0.0.1:10002 max_fails=3 fail_timeout=10s;
    }

    server {
        listen 8080;
        proxy_pass $name;
        ssl_preread on;
    }
}

Если кто-нибудь может указать мне правильное направление, я был бы благодарен!

...