У меня настроена балансировка нагрузки HTTP / HTTPS в Google Compute Engine с двумя глобальными правилами переадресации (HTTP и HTTPS). Каждое правило указывает на внутреннюю службу с протоколом HTTP.
Я хочу, чтобы все запросы http://*
идти в https://*
.
Поскольку балансировщик нагрузки общается с серверными службами через HTTP, я не думаю, что смогу заставить nginx на серверной службе отправлять обратно 301
.
Я пробовал десяток небольших настроек вычислений Google, и все они заканчиваются тем, что вычисления Google возвращают 502
.
Я уверен, что кто-то еще настраивал это раньше. Мы очень ценим любые советы или указатели в правильном направлении.
У нас есть аналогичная настройка с использованием балансировщика нагрузки HTTP / HTTPS, и нам удалось принудительно настроить HTTPS. Это невозможно напрямую из балансировщика нагрузки, но вы можете настроить его из своей серверной службы. Балансировщик нагрузки Google Cloud установит http-заголовок X-Forwarded-Proto со значением http или https. Вы проверяете этот заголовок в своей серверной службе (в нашем случае Varnish, но это также можно сделать в Nginx), и если значение равно http, вы отправляете обратно 301.
Сегодня я столкнулся с этой проблемой и смог решить ее с помощью балансировки нагрузки TCP. Если вам не нужны специальные параметры балансировщика нагрузки HTTP / HTTPS, возможно, вы можете использовать балансировщик нагрузки TCP (без SSL) для приема трафика как на порт 80, так и на 443. Для трафика с порта 80 вы можете отправить обратно 301.
В настоящее время вы можете сделать это прямо из HTTP (S) Load Balancing. В Google Cloud появилась поддержка Rewrites и Redirects (с апреля 2020 года).
См. Эту статью, чтобы узнать, как настроить:
https://cloud.google.com/load-balancing/docs/https/setting-up-traffic-management#console Подробнее об этой функции:
https://cloud.google.com/load-balancing/docs/features#routing_and_traffic_management