1

Я использую L7 HTTP Load Balancer. Я хочу перенаправить HTTP-запросы на HTTPS. Это часть моей конфигурации nginx. Он работает, когда я получаю доступ к моему веб-серверу без Load Balancer. Но он не работает с Load Balancer. Ошибка 404.Как перенаправить HTTP-запросы на HTTPS с GCP Load Balancer

Как это исправить?

Я использую Nginx

server { 
    listen 80; 
    server_name example.com; 
    return 301 https://$host$request_uri; 
} 

server { 
    listen 443 ssl; 
    ... 
} 

HTTP Response

HTTP/1.1 404 Not Found 
Server: Google Frontend 

Я нашел этот вопрос ниже, и я добавил $ http_x_forwarded_proto проверить. Но результат не изменился.

Issue 255: Перенаправление всего HTTP трафика HTTPS при использовании HTTP (S) Load Balancer https://code.google.com/p/google-compute-engine/issues/detail?id=255&thanks=255&ts=1446612833

server { 
    listen 80; 
    server_name example.com; 
    if ($http_x_forwarded_proto = "http") { 
     return 301 https://$host$request_uri; 
    } 
} 

server { 
    listen 443 ssl; 
    ... 
} 

Update 1

я обнаружил, что моя балансировка нагрузки имеет только HTTPS протокол конечная конфигурация. Я думаю, мне нужна настройка конца HTTP-порта.

Это сообщение ниже было бы полезно.

GCE Load Balancer HTTPS and HTTP IP

+0

Вы когда-нибудь могли решить эту проблему? Если да, пожалуйста, подумайте о том, чтобы отправить ответ самостоятельно, чтобы сообщество могло извлечь выгоду. – Faizan

ответ

0

Поскольку балансировки нагрузки только отправка трафика на 443, ваш блок-сервер для 80 никогда не используется. Другими словами: все входящие соединения с балансировщиком нагрузки на обоих портах 80 и 443 и отправляются через 443 в бэкэнд, даже если они не являются соединениями HTTPS.

Решение предназначено для перенаправления на HTTPS при сохранении безопасности SSL во всем бэкэнд. На лицевой стороне балансировочного устройства нагрузки откройте порты 80 и 443, а на бэкэнд отправьте все через HTTPS. Затем установите условие X_Forwarded_Proto в блоке сервера SSL.

server { 
    listen 443 ssl; 
    ... 
    if ($http_x_forwarded_proto = "http") { 
     return 301 https://$host$request_uri; 
    } 
    ... 
} 

EDIT: Проверьте это также. Google отслеживает этот запрос функции. https://issuetracker.google.com/issues/35904733