In che modo è possibile reindirizzare il traffico HTTP a HTTPS sul mio Classic Load Balancer?

4 minuti di lettura
0

Sto utilizzando listener HTTP e HTTPS sul mio Classic Load Balancer. Il mio Classic Load Balancer scarica SSL e la connessione di backend è in ascolto su una singola porta HTTP (porta 80). Quando provo a reindirizzare il traffico da HTTP a HTTPS (porta 443), ricevo l'errore "ERR_TOO_MANY_REDIRECTS". Come posso risolvere questo errore senza cambiare il mio ascoltatore di backend sulla porta 443?

Breve descrizione

I Classic Load Balancer non possono reindirizzare il traffico HTTP a HTTPS di default. Invece, configura le regole di riscrittura per le istanze dei server Web dietro il Classic Load Balancer.

Devi configurare le regole di riscrittura per utilizzare l'intestazione X-Forwarded-Proto e reindirizzare solo i client HTTP. In caso contrario, le regole di riscrittura possono creare un ciclo infinito di richieste di reindirizzamento tra Classic Load Balancer e le istanze dietro di esso. Tale ciclo genera l'errore "ERR_TOO_MANY_REDIRECTS".

Nota: Gli Application Load Balancer possono reindirizzare il traffico HTTP a HTTPS utilizzando operazioni di reindirizzamento. Migra il tuo Classic Load Balancer a un Application Load Balancer per utilizzare queste caratteristiche.

Risoluzione

Esamina le seguenti configurazioni di esempio per i server Web Apache, NGINX e IIS. Configura i server web dietro Classic Load Balancer per utilizzare l’intestazioneX-Forwarded-Proto per indirizzare il traffico in base al fatto che i client utilizzino HTTP o HTTPS. Assicurati di aggiungere regole di riscrittura ai tuoi server Web che:

  • Reindirizzano i client utilizzando HTTP a un URL HTTPS
  • Servono i client utilizzando direttamente HTTPS

Importante: Le seguenti configurazioni sono fornite solo come esempi. Modificali in base alla tua configurazione e al caso d'uso.

Server Apache: metodo file host virtuale (best practice)

1.    Apri il file di configurazione di Apache. Le possibili posizioni includono /etc/httpd/conf/httpd.conf (Apache 2/httpd), /etc/apache2/sites-enabled/ (Apache 2.4), or /etc/apache2/apache2.conf (Apache su Ubuntu).

2.    Aggiungi una regola di riscrittura a VirtualHost sezione del file di configurazione simile alla seguente:

<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
</VirtualHost>

3.    Salva il file di configurazione di Apache.

4.    Riavvia Apache.

Server Apache: metodo file .htaccess (non una best practice)

Attenzione: è una best practice utilizzare il metodo del file dell'host virtuale Apache descritto nella sezione precedente. Secondo le Linee guida per i file Apache .htaccess, usa il file .htaccess solo se non hai accesso al file di configurazione principale di Apache.

1.    Apri il file di configurazione di Apache. Le possibili posizioni includono /etc/httpd/conf/httpd.conf (Apache 2/httpd) o /etc/apache2/sites-enabled/ (Apache 2.4).

2.    Modifica la direttiva della Directory per abilitare .htaccess come segue:

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

3.    Salva il file di configurazione di Apache.

4.    Apri il tuo file**.htaccess**.

5.    Aggiungi una regola di riscrittura simile alla seguente:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

6.    Salva il tuo file**.htaccess**.

7.    Riavvia Apache.

Server NGINX

Nota: Questa risoluzione si applica a NGINX 1.10.3 (Ubuntu) e NGINX 1.12.1 (Amazon Linux).

1.    Apri il tuo file di configurazione NGINX (nginx.conf).

2.    Aggiungi la seguente regola di riscrittura. Assicurati di modificare la regola di riscrittura per la tua configurazione.

server {
    listen 80;
    server_name _;
    if ($http_x_forwarded_proto = 'http'){
    return 301 https://$host$request_uri;
    }
}

3.    Riavvia NGINX.

Server IIS

Nota: Questa risoluzione si applica a Microsoft Windows Server 2012 R2 e 2016 Base.

1.    Installa il Modulo di riscrittura IIS URL da Microsoft.

2.    Apri il tuo fileweb.config.

3.    Aggiungi la seguente regola di riscrittura alla sezione <system.webServer> . Assicurati di modificare la regola di riscrittura per la tua configurazione specifica.

<rewrite>
    <rules>
        <rule name="Rewrite HTTP to HTTPS" stopProcessing="true">
            <match url="^(.*)$"/>
            <conditions logicalGrouping="MatchAny">
                <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$"/>
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
        </rule>
    </rules>
</rewrite>

4.    Salva il tuo file web.config.

5.    Apri Gestore IIS.

6.    Aggiorna il sito Web di default.

7.    Verifica che la tua nuova regola di riscrittura appaia nella sezioneRiscrivi URL.

8.    Riavvia il tuo sito Web.

9.    Verifica che il tuo reindirizzamento funzioni.


Informazioni correlate

Ricevo messaggi di errore HTTP 5xx quando mi connetto ai server Web che vengono eseguiti sulle istanze EC2 configurate per l'utilizzo di Classic Load Balancing. In che modo posso risolvere il problema?