fdroid
@fdroid
press any key

Как реализовать внешний веб-доступ по одному IP на разные серверы?

Здравствуйте.

Дано: белый IP, за роутером прячутся три сервера, к которым нужен доступ через браузер, через https. 1) Сервер А. На нём крутится веб-приложение, прикручен домен domain.example, сертификат коммерческий, работает на очень специфической специально заточенной версии nginx, настраивать практически нечего. При этом, используются нестандартные порты вместо 80 и 443, т.е. доступ вида domain.example:1234 работает, но сертификаты от LE не получить, т.к. для этого требуется открытый 80 и 443 порты, поэтому сертификат куплен 2) Сервер Б. На нём другое веб-приложение, прикручен субдомен от домена Сервера А - second.domain.example. Сертификат от Letsencrypt, т.к. Wildcard нет и не будет. Работает на Apache, опять же заточенном, т.е. править тоже нечего 3) Сервер В. Тоже веб-приложение, субдомен third.domain.example, сертификат LE, стандартный Apache.

И вот нужно доступ ко всему этому зоопарку организовать через один IP. Нужен прокси, в его качестве использовать виртуалку одного из серверов (желательно) либо ставить отдельную железку (нежелательно). При этом, сертификаты должны оставаться на самих серверах, а не находиться на прокси, и нужно умение пробрасывать нестандартные порты на стандартные (Сервер А). Вот и вопрос - какой софт использовать для проксирования? Мне известны три варианта - Apache с mod_proxy, но он требует нахождения сертификатов на самом прокси, с соответствующей настройкой виртуальных хостов. Nginx c proxy_pass? - но, честно говоря, я так и не понял - умеет ли он всё это. То, что на прокси с nginx можно настроить получение сертификатов от LE и потом их "раздавать" на нужные серверы, я знаю, но это не то что нужно. Нашёл ещё haproxy. Чуть вены вчера себе не перегрыз пока настраивал. В чём прикол - так и не понял. Вроде бы, работает как задуманно, но периодически то один то другой серверы становятся недоступны, либо отдельные страницы. И ещё, насколько я понял, это больше балансировщик чем прокси. Или нет?

Не упустил ли я ещё что-нибудь?
  • Вопрос задан
  • 524 просмотра
Пригласить эксперта
Ответы на вопрос 1
ky0
@ky0 Куратор тега Nginx
Миллиардер, филантроп, патологический лгун
на очень специфической специально заточенной версии nginx

В чём заключается эта специфичность?

используются нестандартные порты вместо 80 и 443, т.е. доступ вида domain.example:1234 работает, но сертификаты от LE не получить, т.к. для этого требуется открытый 80 и 443 порты

Используйте webroot-авторизацию, в этом случае всё равно, какие у вас там внутри порты.

сертификаты должны оставаться на самих серверах, а не находиться на прокси

Это требование исходя из чего?

По сути вопроса - да, nginx всё это умеет, proxy_pass настраивается буквально тремя строчками даже в таком экзотическом варианте, как HTTPS -> HTTPS на кастомный порт. Другое дело, что так никто не делает по понятным причинам. Как раз наоборот - делают единый (ну или отдельный для каждого приложения) https-гейт с nginx`ом, на котором, собственно, и терминируется HTTPS, устанавливается сервис для получения-обновления сертификатов от LE, а внутрь пробрасывается нешифрованный HTTP.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы