Здравствуйте,
Подскажите, как-то можно указать протокол для upstream серверов для обратного прокси?
Необходимо в число upstream серверов включить локальный сервер, вот только доступ к нему производить по http, к остальным по https.
Перечислить его в блоке upstream я могу, а как в директиве proxy_pass разветвлиться и уйти на обработку подключения без https?
Или может быть есть какой-то способ лучше?
Понятно, что upstream сервера по идее должны быть идентичными, но как тогда правильнее реализовать перебор серверов, подключение к которым необходимо производить по разным протоколам?
Буду признателен за подсказку.
Подключение по разным протоколам (http и https) подразумевает потенциально существенную разницу настроек прокcирующего location. К примеру, для прокcирования по https может понадобиться указать proxy_ssl_name.
По сути, ваша задача и сводится к тому, чтобы привести все сервера в группе upstream к идентичности. Например, тот единственный, который принимает соединения по http, можно внести в дополнительный слой проектирования в stream, который будет просто конвертировать https в http. Принцип:
stream {
upstream backend (
server backend_http:80;
)
server {
listen 127.0.0.1:8443 ssl;
ssl_certificate cert.crt;
ssl_certificate_key cert.key;
proxy_pass backend;
}
}
http {
upstream backend_https {
server backend_https_1:443;
server backend_https_2:443;
server 127.0.0.1:8443;
}
server {
location {
proxy_pass https://backend_https;
}
}
}