Я пытаюсь настроить 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;
}
}
Если кто-нибудь может указать мне правильное направление, я был бы благодарен!