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.


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


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.