Salta al contenuto

Come posso reindirizzare il traffico da HTTP a HTTPS sul mio ELB Classic Load Balancer?

4 minuti di lettura
0

Sul mio Classic Load Balancer Elastic Load Balancing (ELB) utilizzo listener HTTP e HTTPS. Il mio Classic Load Balancer esegue l'offloading di SSL e la connessione 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".

Breve descrizione

I Classic Load Balancer non supportano il reindirizzamento del traffico da HTTP a HTTPS come funzionalità nativa. A tal fine, devi configurare regole di riscrittura sulle istanze del server web dietro il Classic Load Balancer.

Configura le regole di riscrittura sui server delle applicazioni web per utilizzare l'intestazione X-Forwarded-Proto e reindirizzare le richieste HTTP. Altrimenti, le regole di riscrittura possono creare un ciclo infinito di richieste di reindirizzamento tra il Classic Load Balancer e le istanze dietro il bilanciatore del carico. Tale ciclo genera l'errore "ERR_TOO_MANY_REDIRECTS".

Nota: gli Application Load Balancer supportano azioni di reindirizzamento che possono essere utilizzate per reindirizzare il traffico da HTTP a HTTPS. Per utilizzare questa funzionalità, esegui la migrazione del Classic Load Balancer a un Application Load Balancer.

Risoluzione

Esamina i seguenti esempi di configurazione per server Web Apache, NGINX e IIS. Configura i server web dietro il Classic Load Balancer per utilizzare l'intestazione X-Forwarded-Proto affinché il traffico venga indirizzato in base all'utilizzo di HTTP o HTTPS da parte dei client. Assicurati di aggiungere regole di riscrittura ai server web che:

  • Utilizzino HTTP per reindirizzare i client a un URL HTTPS
  • Utilizzino HTTPS per servire direttamente i client

Nota: modifica i seguenti esempi di configurazione in base alla tua configurazione e al caso d'uso.

Server Apache: Metodo del file host virtuale

È consigliabile utilizzare il seguente metodo per configurare i server web:

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

  2. Aggiungi una regola di riscrittura alla sezione VirtualHost 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 del file .htaccess

Se non hai accesso al file di configurazione principale di Apache, utilizza i file .htaccess. Per ulteriori informazioni, consulta la sezione When (not) to use .htaccess files (Quando (non) utilizzare i file .htaccess) nella pagina Apache HTTP Server Tutorial: .htaccess files (Tutorial Server HTTP Apache: file .htaccess) del sito web Apache.

Per configurare i server web, completa i seguenti passaggi:

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

  2. Modifica la direttiva Directory per attivare .htaccess:

    <Directory "/var/www/html">    Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
  3. Salva il file di configurazione di Apache.

  4. Apri il file .htaccess.

  5. Aggiungi una regola di riscrittura simile alla seguente:

    RewriteEngine OnRewriteCond %{HTTP:X-Forwarded-Proto} =http
    RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
  6. Salva il 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).

Completa i seguenti passaggi:

  1. Apri il file di configurazione di 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.

Completa i seguenti passaggi:

  1. Installa il modulo di riscrittura degli URL di IIS. Per ulteriori informazioni, consulta URL rewrite (Riscrittura degli URL) sul sito web Microsoft.

  2. Apri il file web.config.

  3. Aggiungi la seguente regola di riscrittura alla sezione <system.webServer>. Modifica 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 file web.config.

  5. Apri Gestione IIS.

  6. Aggiorna il sito web predefinito.

  7. Verifica che la nuova regola di riscrittura sia visualizzata nella sezione Riscrittura URL.

  8. Riavvia il sito web.

  9. Verifica che il reindirizzamento funzioni.

Informazioni correlate

Perché ricevo un errore HTTP 5xx quando mi connetto a server web eseguiti su istanze EC2 configurate per utilizzare Classic Load Balancing?

AWS UFFICIALEAggiornata 2 anni fa