.htaccess RewriteCond pour REMOTE_ADDR alors que derrière Load Balancer?

9

J'ai un serveur Web derrière un équilibreur de charge.

Je dois ajouter une redirection conditionnelle à mon .htaccess afin d'afficher une page de maintenance chaque fois que nous mettons le site hors ligne pour maintenance. Cette partie est simple:

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

Cependant, je veux ajouter à condition que si l'adresse IP du visiteur est la mienne, elle ne me redirige pas vers la page de maintenance et que je puisse voir et tester le site comme s'il était en ligne. Cette partie est normalement aussi simple:

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]

Cependant, comme mon serveur Web se trouve derrière un équilibreur de charge, il REMOTE_ADDRest résolu en l'adresse IP interne du serveur Load Balance.

Comment puis-je modifier cela pour rechercher l'adresse IP transférée? Je sais qu'en PHP, vous pouvez utiliser $_SERVER['HTTP_X_FORWARDED_FOR']pour obtenir l'adresse IP transférée. J'ai essayé quelques trucs dans le .htaccessmais pas de chance:

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

SOLUTION

J'ai obtenu le travail suivant:

%{HTTP:X-FORWARDED-FOR}
Jake Wilson
la source
% {HTTP: X-Forwarded-For} est le bon. Est-il sensible à la casse?
Jeff Strunk
Tous les caps ont fonctionné pour moi. Je suppose que ce n'est pas sensible à la casse ou bien c'est un alias ou quelque chose.
Jake Wilson
Servez-vous vraiment .jpeou .jpfichiers?
7heo.tk

Réponses:

10

Utiliser %{HTTP:X-FORWARDED-FOR}au lieu de%{REMOTE_ADDR}

Ryan
la source
Je sais que vous y avez déjà répondu dans votre question, mais vous n'aviez pas de réponse en dessous qui correspondait. Merci pour votre réponse! M'a sauvé aujourd'hui.
Ryan
2

Vous avez besoin de mod_rpaf . Ce module réécrira REMOTE_ADDR dans apache avec un autre en-tête, tel que x-forwarded-for. Très utile pour que les applications PHP se comportent avec les équilibreurs de charge.

Matthew Ife
la source
0

Si vous avez deux environnements, disons une production derrière l'équilibrage de charge et un développement ou une mise en scène non derrière l'équilibre de charge, et que vous souhaitez utiliser le même fichier .htaccess, vous aurez besoin à la fois de% {HTTP: X-FORWARDED-FOR} et % {REMOTE_ADDR} - attribuez des adresses IP aux deux conditions.

Andrew S
la source
1
De plus, sur certains serveurs apache, la barre oblique inverse confondra le serveur. Mettez simplement! ^ 123.123.123.123 (sans les barres obliques inverses, pour signifier sinon IP 123.123.123.123) si vous ne pouvez pas obtenir une itération avec des barres obliques inverses pour fonctionner.
Andrew S