Reindirizzamento dell’Elb EC2 da http a https

Voglio redirect tutta la richiesta http alla richiesta https su elb. Ho 2 istanze ec2. Sto usando nginx per il server. Ho provato a riscrivere i file conf nginx senza alcun successo. Mi piacerebbe qualche consiglio su di esso.

ELB imposta l’intestazione X-Forwarded-Proto , è ansible utilizzarlo per rilevare se la richiesta originale era HTTP e redirect a HTTPS.

Puoi provare questo nel conf del tuo server :

 if ($http_x_forwarded_proto = 'http') { return 301 https://yourdomain.com$request_uri; } 

Dai un’occhiata ai documenti ELB .

Ho avuto lo stesso problema, nella mia situazione HTTPS è stato gestito interamente da ELB e non conoscevo il mio dominio di origine prima del tempo, quindi ho finito per fare qualcosa del tipo:

 server { listen 81; return 301 https://$host$request_uri; } server { listen 80; # regular server rules ... } 

E poi, naturalmente, puntando l’https dell’ELB alla porta di istanza 80 e quindi la route “http” alla porta di istanza 81.

Amazon Elastic Load Balancer (ELB) supporta un’intestazione HTTP denominata X-FORWARDED-PROTO. Tutte le richieste HTTPS che passano attraverso l’ELB avranno il valore di X-FORWARDED-PROTO uguale a “HTTPS”. Per le richieste HTTP, puoi forzare HTTPS aggiungendo la seguente regola di riscrittura semplice. Per me funziona bene!

Apache

Puoi aggiungere le seguenti righe nel tuo file .htaccess:

 RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} 

Oppure se usi vhost.conf per la gestione di più domini nello stesso server web EC2, puoi aggiungere in seguito a vhost.conf (aggiungilo al dominio che vuoi usare per questo https):

  ... RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} ...  

IIS

Installare il modulo IIS Url-Rewrite, utilizzando la GUI di configurazione aggiungere queste impostazioni:

            

Leggi di più qui

I bilanciatori del carico delle applicazioni AWS ora supportano il reindirizzamento nativo da HTTP a HTTPS.

Per abilitare questo nella console, fai quanto segue:

  1. Vai al tuo Load Balancer in EC2 e scheda “Listeners”
  2. Seleziona “Visualizza / modifica regole” sul listener HTTP
  3. Elimina tutte le regole tranne quella predefinita (in basso)
  4. Modifica regola predefinita: scegli “Reindirizza a” come azione, lascia tutto come predefinito e inserisci “443” come porta.

Regola listener di reindirizzamento nativo

Lo stesso può essere ottenuto utilizzando la CLI come descritto qui .

Non è ancora ansible farlo tramite Cloudformation, vedi qui .

Se usi ancora i Load Balancer classici, vai con una delle configurazioni NGINX descritte dagli altri.

Potrebbe non essere la soluzione che stavi cercando, ma un’altra opzione potrebbe essere quella di utilizzare AWS CloudFront oltre a ELB. CloudFront offre l’opzione per redirect tutto il traffico HTTP in arrivo su HTTPS.

Ho avuto strani problemi con la configurazione di nginx e ELB. Il mio setup includeva 3 diversi servizi all’interno di un nginx dietro a ELB. E ho riscontrato un problema con i contenuti misti: quando la tua richiesta a ELB è https, ma solo all’interno di ELB http, e il server crea il relativo percorso statico usando http, così il browser fallisce con il problema dei “contenuti misti”. E devo creare una soluzione per entrambi i lavori http / https senza reindirizzamenti.

Ecco la configurazione che si trova nella cartella nginx/conf.d/ :

 # Required for http/https switching map $http_x_forwarded_port $switch { default off; "80" off; "443" on; } 

Ciò significa che avremo la conoscenza del vero protocollo client. Come puoi vedere, lo avremo in $switch var var. E in questo momento lo usi in tutto il luogo in cui ti serve:

 location ~ /softwareapi/index.php { fastcgi_param HTTPS $switch; .. other settings here .. } 

Con l’impostazione HTTPS, l’applicazione php rileva automaticamente il protocollo corretto e crea accuratamente il percorso relativo per prevenire il problema dei contenuti misti.

I migliori saluti.

Le soluzioni htaccess riportate sopra hanno causato il fallimento del controllo dello stato ELB. Ho avuto qualche problema a trovare la soluzione finché non ho scoperto un articolo online in cui qualcuno aveva gli stessi problemi che avevo. La sua soluzione era di aggiungere questo all’inizio del file htaccess invece:

 RewriteEngine on RewriteCond %{HTTP:X-Forwarded-Proto} ^http$ RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

Per consentire questa e altre richieste locali su HTTP durante il reindirizzamento di richieste esterne tramite ELB a HTTPS, regolare la condizione di riscrittura in modo che corrisponda a http anziché a una corrispondenza negativa su https.

Fonte: reindirizzamento da HTTP a HTTPS con AWS e ELB

Crea un file .ebextensions/00_forward_http_to_https.config con il seguente contenuto:

 files: /tmp/deployment/http_redirect.sh: mode: "000755" content: | APP_URL=`/opt/elasticbeanstalk/bin/get-config environment --output yaml | grep -oP 'APP_URL: \K([^\s)\"](?!ttp:))+'` sed -ie '[email protected]$proxy_add_x_forwarded_for;@$proxy_add_x_forwarded_for;\n if ($http_x_forwarded_proto = 'http') { return 301 https://'"$APP_URL"'$request_uri; }@' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf container_commands: http_redirect: command: "/tmp/deployment/http_redirect.sh" 

Assicurati di impostare preventivamente la variabile d’ambiente APP_URL dalla console di gestione AWS.