Передача произвольных потоков с помощью nginx
У меня есть две программы, которые общаются по протоколу tcp. Я перемещаю их на разные хосты, поэтому я хочу, чтобы соединение было зашифровано. Вместо того, чтобы добавлять код SSL в мои приложения и рисковать ошибкой, которая ставит под угрозу безопасность, кажется, проще всего и разумнее позволить nginx справиться с этим.
Но это двоичные потоки, а не http. Я думаю, что, возможно, я хочу использовать модули ngx_stream_core_module или, возможно, модули ngx_stream_ssl_module, но (1) на самом деле, это удар в темноте, это только единственные модули, которые я нашел, которые кажутся отдаленно вероятными (например, не у них нет блоков местоположения), (2) эти модули, скорее всего, предназначены для балансировки нагрузки, и (3) не понимая, для чего предназначены эти модули, довольно сложно правильно их использовать.
В самом деле, я думаю, что я пытаюсь использовать nginx в обратном направлении, так как обычно nginx завершает соединение TLS и proxy_pass в открытом виде, в то время как я хочу сделать обратное: принять соединение с открытым текстом и proxy_pass его с TLS.
В качестве быстрого теста я сначала подтверждаю, что мой экземпляр nginx собран с модулем stream:
$ nginx -V 2>&1 | tr ' ' '\n' | grep -i stre
--with-stream
--with-stream_ssl_module
$
Затем я пишу этот файл с именем pliny, пропуская часть SSL, пока проверяю, что могу хотя бы proxy_pass:
stream {
upstream backend {
server 127.0.0.1:3002;
}
server {
listen 3001;
proxy_pass backend;
}
}
Счастья там нет
$ sudo nginx -t
nginx: [emerg] "stream" directive is not allowed here in /etc/nginx/sites-enabled/pliny:1
nginx: configuration file /etc/nginx/nginx.conf test failed
$
Любые советы о том, как использовать Nginx в качестве туннеля TLS? (Или указатели на то, что я должен делать вместо этого?)