Forçar HTTPS com mod_rewrite, incluindo SSL com proxy


9

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

Quero uma regra mod_rewrite que permita apenas tráfego HTTPS direto ou 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: delimitadores de sinalizadores inválidos

erro.

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

Respostas:


16

O problema era 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...


Não tenho certeza de que, se o SSL for descarregado, a variável HTTPS será sempre definida. De qualquer forma, na minha situação, isso funcionou bem sem o primeiro teste.
wurtel

1

Se você tiver o balanceador de carga sempre usar SSL ao se comunicar com o servidor, precisará omitir a primeira verificação, pois sempre será verdadeira. (Se você estiver transferindo o SSL no balanceador de carga, a primeira linha será sempre verdadeira, a menos que alguém consiga atingir diretamente seu servidor usando SSL, caso em que seria falso e não tentaria redirecionar, pois X-Forwarded-Protoestaria 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]
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.