Força HTTPS com mod_rewrite, incluindo SSL com proxy

8

Eu tenho um servidor recebendo algum tráfego de um balanceador de carga de terminação SSL - nesse caso ele vem como HTTP pela porta 80 com http_x_forwarded_proto ="https"

Eu quero uma regra mod_rewrite que permita apenas o tráfego HTTPS direto ou o tráfego HTTPS encaminhado.

Eu tenho isso até agora:

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]

mas estou recebendo

RewriteCond: bad flag delimiters

erro.

O que preciso corrigir para que isso funcione e essa é a melhor abordagem?

    
por Yarin 01.10.2012 / 18:32

2 respostas

16

O problema foi o espaço em branco após o "!=":

Versão de trabalho:

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

complicado ...

    
por 01.10.2012 / 23:46
0

Se o balanceador de carga sempre usar SSL ao se comunicar com o servidor, você precisará omitir a primeira verificação, pois ela sempre será verdadeira. (Se você estiver descarregando o SSL no balanceador de carga, a primeira linha será sempre verdadeira, a menos que alguém atinja diretamente o servidor usando SSL, caso em que seria falso e não tentaria redirecionar, pois X-Forwarded-Proto estaria ausente.)

O código que estou usando, pois estamos sempre nos comunicando por SSL entre o ELB e o servidor da web:

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