.htaccess RewriteCond for REMOTE_ADDR enquanto estiver atrás do Load Balancer?

9

Eu tenho um servidor web atrás de um balanceador de carga.

Preciso adicionar um redirecionamento condicional ao meu .htaccess para exibir uma página de manutenção sempre que colocarmos o site offline para manutenção. Esta parte é simples:

RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.php [R=302,L]

No entanto, quero adicionar a condição de que, se o endereço IP do visitante for o meu, ele não me redirecionará para a página de manutenção e eu seria capaz de ver e testar o site como se estivesse online. Esta parte também é normalmente direta:

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^11\.111\.111\.111
RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.php [R=302,L]

No entanto, como meu servidor Web está atrás de um balanceador de carga, ele REMOTE_ADDRé resolvido para o endereço IP interno do servidor de Balanceamento de Carga.

Como posso alterar isso para procurar o endereço IP encaminhado? Eu sei que em PHP você pode usar $_SERVER['HTTP_X_FORWARDED_FOR']para obter o endereço IP encaminhado. Eu tentei algumas coisas no, .htaccessmas sem sorte:

%{X_FORWARDED_FOR}
%{HTTP:X_FORWARDED_FOR}
%{HTTP_X_FORWARDED_FOR}

SOLUÇÃO

Eu tenho o seguinte para trabalhar:

%{HTTP:X-FORWARDED-FOR}
Jake Wilson
fonte
% {HTTP: X-Forwarded-For} é o correto. É sensível a maiúsculas?
Jeff Strunk
Todos os Caps funcionaram para mim. Eu acho que não diferencia maiúsculas de minúsculas ou então é um apelido ou algo assim.
Jake Wilson
Você realmente serve .jpeou .jparquivos?
7heo.tk

Respostas:

10

Use em %{HTTP:X-FORWARDED-FOR}vez de%{REMOTE_ADDR}

Ryan
fonte
Sei que você já respondeu na sua pergunta, mas não teve uma resposta abaixo dessa. Obrigado pela sua resposta! Me salvou hoje.
Ryan
2

Você precisa do mod_rpaf . Este módulo reescreverá REMOTE_ADDR no apache com outro cabeçalho, como x-forwarded-for. Muito útil para fazer com que aplicativos PHP se comportem com balanceadores de carga.

Matthew Ife
fonte
0

Se você tiver dois ambientes, digamos uma produção por trás do equilíbrio de carga e um desenvolvimento ou teste que não esteja por trás do equilíbrio de carga e deseje usar o mesmo arquivo .htaccess, precisará de% {HTTP: X-FORWARDED-FOR} e % {REMOTE_ADDR} - atribua endereços IP às duas condições.

Andrew S
fonte
1
Além disso, em alguns servidores apache, a barra invertida irá confundir o servidor. Basta colocar! ^ 123.123.123.123 (sem as barras invertidas, para significar se não for IP 123.123.123.123) se você não conseguir obter uma iteração com as barras invertidas para funcionar.
Andrew S