конфиге прописан upstream, содержащий несколько адресов, один из которых локальный, остальные внешние по отношению к хосту.
В location этот апстрим используется со схемой http. Возникла задача настроить шифрование, при взаимодействии с внешними серверами. То есть, сделать, чтобы при обращении к локальному сервису использовалась схема http, а в остальных случаях использовалась схема https.
В блоке upstream указать схему нельзя.
Пробовал использовать переменную «$upstream_addr», чтобы на ее основании указывать ту или иную схему, но на момент, когда она запрашивается, она еще не содержит значения. То есть nginx еще не знает какой конкретно из адресов в апстриме он будет использовать.
Как возможно решить эту задачу?
Тебе прям обязательно, чтобы локальный был без HTTPS? Имхо, гораздо проще туда тоже воткнуть https с самоподписанным сертификатом и забить на надуманную проблему
В общем случае - никак.
Сейчас обращение к локальной службе идет напрямую nginx -> http://local_service (если локальная служба не работает, то nginx -> https://another_nginx -> http://local_service). Целевая служба не работает по https. Можно моздать дополнительный блок server в nginx, но это лишняя петля на накладные расходы. Вдруг есть способ, просто не очевидный :)
Только локальная петля.
ну так сделай два блока upstream, для разных схем
Основная задача как раз обеспечить отказоустойчивость, со split_client как-то костыльно получается. Видимо да, локальная петля наше все :) Спасибо за советы!
Обсуждают сегодня