Я настроил балансировку нагрузки HTTP / HTTPS в Google Compute Engine с двумя правилами глобальной пересылки (HTTP и HTTPS). Каждое правило указывает на серверную службу с протоколом HTTP.
Я хочу, чтобы все запросы http://*
отправлялись https://*
.
Поскольку балансировщик нагрузки общается с внутренними службами через HTTP, я не думаю, что могу получить nginx на внутреннем сервисе для отправки обратно a 301
.
Я пробовал дюжину небольших изменений в Google Compute, и все они в итоге возвращают Google Compute 502
.
Я уверен, что кто-то еще настраивал это раньше. Любые советы или указатели в правильном направлении очень ценятся.
load-balancing
google-compute-engine
Райан Лекей
источник
источник
Ответы:
У нас аналогичная настройка с использованием балансировщика нагрузки HTTP / HTTPS, и нам удалось принудительно установить HTTPS. Это невозможно напрямую из балансировщика нагрузки, но вы можете настроить его из своей бэкэнд-службы. Балансировщик нагрузки Google Cloud установит заголовок X-Forwarded-Proto http со значением http или https. Вы проверяете этот заголовок в своем бэкэнд-сервисе (в нашем случае это Varnish, но это также может быть сделано в Nginx), и если значение равно http, вы отправляете обратно 301.
источник
if ($http_x_forwarded_proto = "http") {
return 301 https://$host$request_uri;
}
426
заголовок обновления HTTP, а не 301. Подробнее: stackoverflow.com/questions/17873247/…Я столкнулся с этой проблемой сегодня и смог решить ее с помощью балансировки нагрузки TCP. Если вам не нужны специальные параметры балансировки нагрузки HTTP / HTTPS, возможно, вы можете использовать балансировщик нагрузки TCP (без SSL) для получения трафика на порты 80 и 443. Для трафика от порта 80 вы можете отправить обратно 301.
источник