Forzar HTTPS con mod_rewrite, incluido SSL proxy

9

Tengo un servidor que recibe tráfico de un equilibrador de carga de terminación SSL, en cuyo caso viene como HTTP sobre el puerto 80 con un http_x_forwarded_proto= "https"

Quiero una regla mod_rewrite que solo permita tráfico HTTPS directo o tráfico HTTPS reenviado.

Tengo esto hasta ahora:

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]

pero me estoy poniendo

RewriteCond: delimitadores de bandera incorrectos

error.

¿Qué necesito corregir para que esto funcione, y este es el mejor enfoque?

Yarin
fuente

Respuestas:

16

El problema era el espacio en blanco después de "! =":

Versión de trabajo:

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

difícil...

Yarin
fuente
No estoy seguro de que si se descarga SSL, la variable HTTPS se establecerá alguna vez. De todos modos, en mi situación, esto funcionó bien sin la primera prueba.
wurtel
1

Si tiene un equilibrador de carga, siempre use SSL cuando se comunique con el servidor, debe omitir la primera verificación, ya que siempre será cierto. (Si está descargando SSL en el equilibrador de carga, la primera línea siempre es verdadera a menos que alguien logre golpear directamente su servidor usando SSL, en cuyo caso sería falso y no intentaría redirigir, ya X-Forwarded-Protoque faltaría).

El código que estoy usando ya que siempre nos estamos comunicando a través de SSL entre ELB y el servidor web:

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