Erzwingen Sie HTTPS mit mod_rewrite, einschließlich Proxy-SSL

9

Ich habe einen Server, der Datenverkehr von einem SSL-terminierenden Load Balancer erhält. In diesem Fall kommt er als HTTP über Port 80 mit einem http_x_forwarded_proto= "https" an.

Ich möchte eine mod_rewrite-Regel, die nur direkten HTTPS-Verkehr oder weitergeleiteten HTTPS-Verkehr zulässt.

Ich habe das bisher:

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]

aber ich bekomme

RewriteCond: Trennzeichen für fehlerhafte Flaggen

Error.

Was muss ich korrigieren, damit dies funktioniert, und ist dies der beste Ansatz?

Yarin
quelle

Antworten:

16

Das Problem war das Leerzeichen nach dem "! =":

Arbeitsversion:

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

knifflig ...

Yarin
quelle
Ich bin nicht sicher, ob die HTTPS-Variable jemals gesetzt wird, wenn das SSL ausgelagert wird. Wie auch immer, in meiner Situation hat dies ohne den ersten Test gut funktioniert.
Wurtel
1

Wenn Sie einen Load Balancer haben, der bei der Kommunikation mit dem Server immer SSL verwendet, müssen Sie die erste Überprüfung weglassen, da sie immer wahr ist. (Wenn Sie SSL am Load Balancer auslagern, ist die erste Zeile immer wahr, es sei denn, jemand schafft es, Ihren Server direkt mit SSL zu erreichen. In diesem Fall wäre dies falsch und würde nicht versuchen, umzuleiten, da X-Forwarded-Protodies fehlen würde.)

Der Code, den ich verwende, da wir immer über SSL zwischen der ELB und dem Webserver kommunizieren:

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