Могу ли я передавать HTTPS-трафик с одного порта на другой?

Я делаю proxy_pass в nginx на порт 80–8000 на моем удаленном сервере, а затем порт перенаправляется с 8000 на 80 с удаленного на мой локальный хост. Это прекрасно работает, но я также хотел бы сделать это с https, но кажется, что nginx нужен действительный сертификат для передачи трафика.

Есть ли способ для моего удаленного сервера просто переслать трафик с порта 443, чтобы сказать 8443 (и тогда я перешлю удаленный 8443 на локальный 443). Затем прекратить ssl на моей машине разработки вместо того, чтобы делать это на удаленном сервере?

Мой пульт работает под управлением Ubuntu, а мой локальный хост запускает OSX.

4 ответа

Хотя nginx, вероятно, имеет сторонний модуль для работы с необработанными TCP-соединениями, я уверен, что по умолчанию все должно быть либо HTTP, либо HTTPS. Я думаю, что в вашей ситуации я бы сделал переадресацию портов на сетевом уровне:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443

Вы можете просто позволить nginx обрабатывать SSL и перенаправлять на порт 8000 на внутреннем сервере. Это означает, что nginx является точкой доступа SSL, и между nginx и бэкэндом нет SSL.

Вероятно, лучший вариант - сделать так, как говорит @cperrin88. Но если вы действительно не хотите расшифровывать https на вашем nginx, вы можете просто переслать это как трафик TCP, а затем расшифровать его позже на бэкэнде.

Nginx по умолчанию не поддерживает TCP-прокси, но вы можете использовать этот модуль https://github.com/yaoweibin/nginx_tcp_proxy_module

Если вы просто хотите передать TCP-трафик, HAProxy является хорошим кандидатом. Простота установки и простая настройка. HAProxy может загружать баланс TCP, а также HTTP-трафик.

Это описание HTTP-трафика в Ubuntu должно помочь вам начать. Измените режим на TCP для балансировки нагрузки необработанного TCP.

Другие вопросы по тегам