Рейтинг:0

nginx Reverse-Proxy: использование потокового модуля для сквозного и обратного прокси

флаг in

Я использую модуль потока для передачи tls-трафика, где я не могу использовать обратный прокси-сервер, например. потому что у меня нет сертификата (локальная установка 3CX) или он ломает вещи (ssl vpn с клиентским сертификатом). Затем я пересылаю «остальные» на другой IP-адрес того же хоста (127.0.0.1) для обратного проксирования. Проблема заключалась в том, что remote_addr не всегда был 127.0.0.1, и, похоже, не было возможности установить «настоящий» удаленный адрес. Чтобы обойти это, я включил proxy_protocol и использовал $proxy_protocol_addr.

Однако это нарушает работу всех транзитных веб-сайтов, и я не нашел способа условно включить proxy_protocol только для «по умолчанию».

Я делаю все это, чтобы иметь возможность сопоставлять sni и использовать один IP-адрес для всех веб-сайтов.

Я не зацикливаюсь на том, чтобы делать это именно так, если у кого-то есть идея, как добиться этого другим/лучшим способом, я весь слушаю.

транслировать {
  карта $ssl_preread_server_name $targetBackend {
    3cx.example.com 192.168.1.2:443;
    vpn.example.com 192.168.1.3:443;
    по умолчанию 127.0.0.1:443;
  }
  сервер {
    слушать 192.168.1.100:443;
    proxy_connect_timeout 1;
    прокси_таймаут 3 с;
    резолвер 192.168.1.1;
    прокси_протокол включен;
    прокси_пасс $targetBackend;
    ssl_preread включен;
  }

Итак... как сделать proxy_protocol условным (афаик, если он просто не работает в контексте потока) или решить его другим способом?

Рейтинг:0
флаг us

Кажется, вам нужно установить интерфейс для 3сх и впн который декодирует протокол PROXY и преобразует его в HTTP-запросы для фактического веб-сервера.

Другой вариант — иметь отдельные экземпляры nginx для веб-сервисов и прокси-протоколов.

Questi avatar
флаг in
Нет, это не работает, я пробовал это, но, похоже, это воспринимается буквально и не разрешает переменную :-(
флаг us
Тогда, я думаю, вам нужно установить совместимый прокси перед «3cx» и «vpn», который декодирует протокол PROXY и перенаправляет запросы на веб-сайты.
Questi avatar
флаг in
так что в основном один потоковый прокси с proxy_protocol, на котором затем перенаправляется на другой потоковый прокси, который слушает proxy_protocol, а затем пересылает без proxy_protocol? Будет ли это работать? Это самое простое решение? звучит как обходной путь
флаг us
Да, это обходной путь, но поскольку условный `proxy_protocol` кажется невозможным, то это один из способов. Другой способ — запустить два отдельных экземпляра nginx, один из которых обрабатывает веб-сайты, а другой — проксирование.
Questi avatar
флаг in
хорошо спасибо. похоже, хотя это обходной путь, это единственное решение? если кто-нибудь знает лучшее решение, не стесняйтесь публиковать, до тех пор я отмечу это как решение. еще раз спасибо На самом деле... Я заметил, что "ответ" в комментариях не ответ... Может быть, вы можете опубликовать новый ответ или отредактировать свой текущий?
флаг us
Я обновил ответ.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.