Przekieruj cały ruch HTTP do HTTPS podczas korzystania z modułu równoważenia obciążenia HTTP (S) w Google Compute Engine

18

Mam skonfigurowane równoważenie obciążenia HTTP / HTTPS w Google Compute Engine z 2 globalnymi regułami przesyłania (HTTP i HTTPS). Każda reguła wskazuje na usługę zaplecza z protokołem HTTP.

Chcę, aby wszystkie prośby http://*trafiły do https://*.

Gdy moduł równoważenia obciążenia komunikuje się z usługami zaplecza za pośrednictwem protokołu HTTP, nie sądzę, żebym mógł uzyskać nginx w usłudze zaplecza, aby go odesłać 301.

Próbowałem tuzin drobnych poprawek w Google Compute i wszystkie kończą się na Google Compute zwracając 502.

Jestem pewien, że ktoś wcześniej to skonfigurował. Wszelkie wskazówki i wskazówki we właściwym kierunku są bardzo mile widziane.

Ryan Leckey
źródło
Przekierowanie HTTP na HTTPS (przy użyciu SSL) nie jest obecnie obsługiwane przez moduł równoważenia obciążenia HTTP / HTTPS. Przekierowanie należy skonfigurować na serwerze internetowym (apache, nginx itp.). Powiedziawszy to, nie wahaj się złożyć prośby o tę funkcję w publicznym narzędziu do śledzenia problemów Compute Engine ( code.google.com/p/google-compute-engine/issues/list ).
Faizan
Dziękuję Ci; otworzył problem: code.google.com/p/google-compute-engine/issues/…
Ryan Leckey
Dobra, przesłałem prośbę o funkcję do inżynierii.
Faizan
@Faizan - czy istnieje oś czasu, kiedy ta funkcja będzie dostępna? Minęło około 2 lat od momentu, gdy ta funkcja została zamówiona. Obejście jest niezgrabne.
talonx
Nowy link do tego żądania to Issuetracker.google.com/issues/35904733 (chociaż stary nadal przekierowuje).
Daniel Compton

Odpowiedzi:

19

Mamy podobną konfigurację za pomocą modułu równoważenia obciążenia HTTP / HTTPS i udało nam się wymusić HTTPS. Nie jest to możliwe bezpośrednio z modułu równoważenia obciążenia, ale można go skonfigurować w usłudze zaplecza. Moduł równoważenia obciążenia Google Cloud ustawi nagłówek http X-Forwarded-Proto o wartości http lub https. Sprawdzasz ten nagłówek w swojej usłudze zaplecza (w naszym przypadku Lakier, ale można to również zrobić w Nginx), a jeśli wartość to http, odsyłasz 301.

Lennert Kuijpers
źródło
8
Dzięki! Ze względu na potomstwo: if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }
Ryan Leckey
Powinieneś użyć 426nagłówka uaktualnienia HTTP zamiast 301. Czytaj więcej: stackoverflow.com/questions/17873247/...
Vikram Tiwari
3
Nie zgadzam się z Vikram, musisz użyć 301 do celów SEO. Jeśli zwrócisz kod rodziny 4xx, twój PageRank nie będzie przepływał przez linki prowadzące do starego http do https. 301 to oczekiwany kod, przynajmniej jeśli zależy Ci na SEO w Twojej witrynie.
cyrrill
1
@VikramTiwari, odpowiedź na post faktycznie mówi: „Nie chodzi nawet o aktualizację z http: // do https: // w ogóle”
Rambatino
1

Napotkałem dzisiaj ten problem i udało mi się go rozwiązać za pomocą równoważenia obciążenia TCP. Jeśli nie potrzebujesz opcji równoważenia obciążenia specyficznych dla HTTP / HTTPS, być może możesz użyć modułu równoważenia obciążenia TCP (bez SSL) do odbierania ruchu zarówno do portu 80, jak i 443. W przypadku ruchu z portu 80 możesz odesłać 301.

Gselva
źródło
1
Równoważenie obciążenia TCP nie jest dozwolone dla portu 80 doc > Równoważenie obciążenia proxy TCP obsługuje następujące porty: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222
Giovanni Toraldo