Можно ли с восходящими потоками NGINX передавать прокси-серверы как HTTP, так и HTTPS в один и тот же восходящий поток?

Предположим, я хочу передать часть своего трафика удаленному серверу вместо локального прослушивателя на сервере. Например:

upstream backends {
    server 127.0.0.1:8080 weight=20;  # local process (HTTP)
    server other-remote-backend.company-internal.com:443;  # remote server (HTTPS)
}


location / {
    # ...other stuff...
    proxy_pass http://backends;
}

В приведенной выше конфигурации каждые 20 или около того запросов NGINX будет пытаться направить на http://other-remote-backend.company-internal.com:443 который только прослушивает SSL.

Есть ли способ для восходящего потока определить свою собственную схему протокола? Прямо сейчас это кажется невозможным без изменения локального процесса слушателя на SSL (что является нежелательным изменением).

Спасибо

1 ответ

Как обычно, я разобрался со своей проблемой, и это вполне очевидно. Если вы пытаетесь выполнить описанное выше, уловка довольно проста.

  1. Сначала создайте новый виртуальный хост NGINX, который прослушивает HTTP и proxy_passes на вашем удаленном HTTPS-сервере следующим образом:

/etc/nginx/sites-available/remote_proxy

upstream remote {
        server other-remote-backend.company-internal.com:443;
}

server {

        # other-remote-backend.company-internal.com:443;

        listen 8181;

        server_name my_original_server_name;

        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_pass https://remote;
        }

}
  1. Теперь вы можете использовать только http для ваших апстримов в исходной конфигурации прослушивания 443:

/etc/nginx/sites-available/default

upstream backends {
    server 127.0.0.1:8080 weight=20;  # local process (HTTP)
    server 127.0.0.1:8181 # local nginx proxying to HTTPS remote
}


location / {
    # ...other stuff...
    proxy_pass http://backends;
}

Теперь просто активируйте свой новый сайт и перезапустите$ ln -s /etc/nginx/sites-available/remote_proxy /etc/nginx/sites-enabled/ && systemctl restart nginx

Другие вопросы по тегам