Есть nginx и за ним два back-end сервера (в перспективе могут быть ещё). Первый back-end проводит предварительные проверки, и в случае успеха, должен передавать соединение другому back-end, чтобы тот выдавал результат. В перспективе, таких back-end для передачи соединения может быть несколько.
Если это важно, соединение идёт по websockets/tls.
Как наиболее оптимально реализовать это переключение через nginx?
Алексей Тен: Спасибо за наводку: это, как правило, лучший вариант, но при websocket-соединении, заголовки отправляются только один раз при handshake. То есть я пока не вижу, как я могу передать нужный заголовок "после".
Алексей Тен: Отличный вопрос. В идеале я бы хотел, чтобы часть запросов выполнялось первым бэкендом, а часть он бы передавал на последующие. Чтобы разгрузить первый бэкенд, я бы хотел, чтобы это переключение шло на уровне nginx.
Что-то мне кажется, что вам придётся написать свой сервер который будет раздавать задания разным бекендам. С точки зрения nginx — web-socket это одно соединение и внутрь него он не умеет заглядывать.
Алексей Тен: А нет возможности разорвать соединение в бэкенде, чтобы nginx быстро передал управление следующему бэкенду на том же соединении с пользователем?