Можно ли перенаправить TCP-соединение с помощью SSL Passthrough в nginx

С блоком stream в nginx TCP-прокси недоступен в nginx. С конфигурацией сквозной передачи SSL он может передавать сертификат клиента на серверную службу для проверки.

Я хочу перенаправить это TCP-соединение с nginx со всеми сертификатами на конечную точку https той же службы.

Обновленный вопрос: Итак, приходит запрос для http://demo.local, который необходимо перенаправить на https://demo.local, затем выполните сквозную передачу SSL после перенаправления для запроса https

----> Конфигурация Nginx

http {
   server {
       listen 80;
       server_name demo.local;
       location / {
           return 302 https://demo.local$request_uri
       }
    }
}
stream {
# main log compatible format
    log_format stream '$remote_addr - - [$time_local] "$ssl_preread_server_name -> $name ($protocol)" '
                          '$status $bytes_sent "" "" "" ';

    map $ssl_preread_server_name $name {
        demo.local pt-up-demo.local;
    }
    upstream pt-up-demo.local {
        server 127.0.0.1:5000;
    }
    upstream proxy-up-demo.local {
        server x.x.x.x:8080;
    }
    server {
        listen 5000 proxy_protocol;
        proxy_pass proxy-up-demo.local'
    }
    server {
        listen 443;
        proxy_pass $name;
        proxy_protocol on;
        ssl_preread on;
        access_log /dev/stdout stream;
    }

}```

person Chirag Tayal    schedule 07.08.2019    source источник


Ответы (1)


Перенаправление HTTP выполняется на уровне HTTP, а не на уровне HTTPS. Чтобы позволить nginx выдать это перенаправление, соединение TLS должно быть прервано nginx, что противоречит желаемому протоколу SSL.

person Steffen Ullrich    schedule 08.08.2019
comment
Можем ли мы сделать перенаправление на уровне http, а затем пройти через ssl? - person Chirag Tayal; 08.08.2019
comment
@ChiragTayal: HTTPS — это HTTP внутри TLS. Прохождение SSL означает передачу TLS, что означает также передачу зашифрованного HTTP внутри TLS. Другими словами: nginx не может перенаправлять на уровне HTTP, так как у него нет доступа к уровню HTTP с прохождением SSL. - person Steffen Ullrich; 08.08.2019
comment
Можем ли мы сделать что-то вроде того, что я упоминал в следующем ответе? - person Chirag Tayal; 09.08.2019
comment
@ChiragTayal: опять же, это не проблема конфигурации, а проблема работы HTTPS. Перенаправление может быть выполнено только после завершения TLS. При проходе через SSL TLS не прерывается nginx, поэтому nginx не может выполнять перенаправления. - person Steffen Ullrich; 09.08.2019
comment
Я не перенаправляю HTTPS-запрос, а HTTP-запрос. Таким образом, поступает запрос для http://demo.local, который необходимо перенаправить на https://demo.local, а затем выполнить сквозную передачу SSL для запроса https. - person Chirag Tayal; 09.08.2019
comment
@ChiragTayal: Я перенаправляю не HTTPS-запрос, а HTTP-запрос. - это не было ясно из вашего вопроса до редактирования. HTTP и HTTPS — это разные разделы в nginx и используют разные порты. Поэтому у вас может быть одна конфигурация для HTTP (порт 80), которая выполняет перенаправление на HTTPS, а затем другая конфигурация для HTTPS (порт 443), где вы выполняете сквозную передачу SSL. Обе эти конфигурации не конфликтуют друг с другом, поскольку применяются к разным портам. - person Steffen Ullrich; 09.08.2019