Forza HTTPS con mod_rewrite, incluso SSL con proxy


9

Ho un server che riceve un po 'di traffico da un bilanciamento del carico che termina SSL, nel qual caso arriva come HTTP sulla porta 80 con un http_x_forwarded_proto= "https"

Voglio una regola mod_rewrite che consenta solo il traffico HTTPS diretto o il traffico HTTPS inoltrato.

Ho questo finora:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:http_x_forwarded_proto} != https
RewriteCond %{HTTP:http_x_forwarded_proto} != HTTPS
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

ma sto ottenendo

RewriteCond: delimitatori di flag non validi

errore.

Cosa devo correggere per farlo funzionare, ed è questo l'approccio migliore?

Risposte:


16

Il problema era lo spazio bianco dopo "! =":

Versione funzionante:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

difficile...


Non sono sicuro che se SSL viene scaricato, la variabile HTTPS verrà mai impostata. Comunque nella mia situazione questo ha funzionato bene senza il primo test.
Wurtel,

1

Se il bilanciamento del carico utilizza sempre SSL quando si comunica con il server, è necessario omettere il primo controllo poiché sarà sempre vero. (Se stai scaricando SSL sul bilanciamento del carico, la prima riga è sempre vera a meno che qualcuno non riesca a colpire direttamente il tuo server utilizzando SSL, nel qual caso sarebbe falso e non tenterebbe di reindirizzare poiché X-Forwarded-Protosarebbe mancante.)

Il codice che sto usando poiché comunichiamo sempre su SSL tra ELB e il server web:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
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.