.htaccess RewriteCond para REMOTE_ADDR mientras está detrás de Load Balancer?

9

Tengo un servidor web detrás de un equilibrador de carga.

Necesito agregar una redirección condicional a mi .htaccess para mostrar una página de mantenimiento cada vez que desconectamos el sitio por mantenimiento. Esta parte es sencilla:

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

Sin embargo, quiero agregar en una condición que si la dirección IP del visitante es la mía, no me redirigirá a la página de mantenimiento y que podría ver y probar el sitio como si estuviera en línea. Esta parte normalmente también es sencilla:

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]

Sin embargo, debido a que mi servidor web está detrás de un equilibrador de carga, REMOTE_ADDRse resuelve en la dirección IP interna del servidor de equilibrio de carga.

¿Cómo puedo modificar esto para buscar la dirección IP reenviada? Sé que en PHP puedes usar $_SERVER['HTTP_X_FORWARDED_FOR']para obtener la dirección IP reenviada. He intentado algunas cosas en el .htaccesspero no tuve suerte:

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

SOLUCIÓN

Tengo lo siguiente para trabajar:

%{HTTP:X-FORWARDED-FOR}
Jake Wilson
fuente
% {HTTP: X-Fordered-For} es el correcto. ¿Es sensible a mayúsculas y minúsculas?
Jeff Strunk
All Caps funcionó para mí. Supongo que no distingue entre mayúsculas y minúsculas o de lo contrario es un alias o algo así.
Jake Wilson el
¿Realmente sirve .jpeo .jparchivos?
7heo.tk

Respuestas:

10

Usar en %{HTTP:X-FORWARDED-FOR}lugar de%{REMOTE_ADDR}

Ryan
fuente
Sé que ya lo respondiste en tu pregunta, pero a continuación no tenías una respuesta que coincidiera. ¡Gracias por su respuesta! Me salvó hoy.
Ryan
2

Necesitas mod_rpaf . Este módulo reescribirá REMOTE_ADDR en apache con otro encabezado, como x-forwards-for. Muy útil para hacer que las aplicaciones PHP se comporten con equilibradores de carga.

Matthew Ife
fuente
0

Si tiene dos entornos, digamos una producción detrás del equilibrio de carga y un desarrollo o puesta en escena no detrás del equilibrio de carga, y desea utilizar el mismo archivo .htaccess, necesitará tanto% {HTTP: X-FORWARDED-FOR} como % {REMOTE_ADDR}: asigna direcciones IP a ambas condiciones.

Andrew S
fuente
1
Además, en algunos servidores apache, la barra invertida confundirá al servidor. En pocas palabras! ^ 123.123.123.123 (sin las barras invertidas, es decir, si no es IP 123.123.123.123) si no puede obtener una iteración con barras invertidas para trabajar.
Andrew S