Reindirizzare tutto il traffico HTTP su HTTPS quando si utilizza il bilanciamento del carico HTTP (S) su Google Compute Engine


18

Ho il bilanciamento del carico HTTP / HTTPS impostato su Google Compute Engine con 2 regole di inoltro globali (HTTP e HTTPS). Ogni regola punta a un servizio back-end con un protocollo HTTP.

Voglio che tutte le richieste http://*vadano a https://*.

Mentre il bilanciamento del carico parla con i servizi di back-end su HTTP, non penso di poter ottenere nginx sul servizio di back-end per inviare a 301.

Ho provato una dozzina di piccole modifiche sul calcolo di Google e tutti finiscono con il calcolo di Google che restituisce un 502.

Sono sicuro che qualcun altro lo ha già impostato in precedenza. Eventuali suggerimenti o indicazioni nella giusta direzione sono molto apprezzati.


Il reindirizzamento da HTTP a HTTPS (utilizzando SSL) non è attualmente supportato tramite il bilanciamento del carico HTTP / HTTPS. Il reindirizzamento deve essere configurato sul server Web (apache, nginx ecc.). Detto questo, non esitare a presentare una richiesta di funzione per questo sul tracker dei problemi pubblici di Compute Engine ( code.google.com/p/google-compute-engine/issues/list ).
Faizan,


Ok perfetto, ho inoltrato la richiesta di funzionalità all'ingegneria.
Faizan,

@Faizan - esiste una sequenza temporale quando questa funzione sarà disponibile? Sono passati circa 2 anni da quando è stata richiesta la funzione. La soluzione è ingombrante.
Talonx,

Il nuovo link per questa richiesta è issuetracker.google.com/issues/35904733 (sebbene il vecchio reindirizzi ancora).
Daniel Compton,

Risposte:


19

Abbiamo una configurazione simile utilizzando il bilanciamento del carico HTTP / HTTPS e siamo riusciti a forzare HTTPS. Non è possibile direttamente dal bilanciamento del carico, ma è possibile configurarlo dal servizio back-end. Il bilanciamento del carico di Google Cloud imposterà l'intestazione http X-Forwarded-Proto con il valore http o https. Puoi controllare questa intestazione nel tuo servizio di back-end (nel nostro caso Varnish ma questo potrebbe essere fatto anche in Nginx) e se il valore è http allora rispedisci un 301.


8
Grazie! Per amore dei posteri: if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }
Ryan Leckey,

È necessario utilizzare l' 426intestazione di aggiornamento HTTP anziché 301. Altre informazioni: stackoverflow.com/questions/17873247/…
Vikram Tiwari,

3
Non sono d'accordo Vikram, devi usare un 301 per scopi SEO. Se restituisci un codice della famiglia 4xx, il tuo pagerank non scorrerà dai link che puntano al vecchio http fino a https. 301 è il codice previsto, almeno se ti interessa la SEO sul tuo sito.
Cyrrill,

1
@VikramTiwari, la risposta al post afferma in realtà: "Non si tratta nemmeno di aggiornare da http: // a https: // affatto"
Rambatino,

1

Ho affrontato questo problema oggi e sono stato in grado di risolverlo utilizzando il bilanciamento del carico TCP. Se non sono necessarie le opzioni di bilanciamento del carico specifiche HTTP / HTTPS, forse è possibile utilizzare il bilanciamento del carico TCP (no SSL) per ricevere il traffico su entrambe le porte 80 e 443. Per il traffico dalla porta 80, è possibile rispedire 301.


1
il bilanciamento del carico tcp non è consentito per la porta 80 doc > Il bilanciamento del carico proxy TCP supporta le seguenti porte: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222
Giovanni Toraldo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.