.htaccess RewriteCond für REMOTE_ADDR hinter Load Balancer?

9

Ich habe einen Webserver hinter einem Load-Balancer.

Ich muss meinem .htaccess eine bedingte Weiterleitung hinzufügen, um eine Wartungsseite anzuzeigen, wenn wir die Site zur Wartung offline schalten. Dieser Teil ist unkompliziert:

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

Ich möchte jedoch unter der Bedingung hinzufügen, dass die IP-Adresse des Besuchers, wenn sie meine eigene ist, mich nicht zur Wartungsseite weiterleitet und ich die Site so sehen und testen kann, als ob sie online wäre. Dieser Teil ist normalerweise auch unkompliziert:

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]

Da sich mein Webserver jedoch hinter einem Load Balancer befindet, REMOTE_ADDRwird er in die interne IP-Adresse des Load Balance-Servers aufgelöst.

Wie kann ich dies ändern, um nach der weitergeleiteten IP-Adresse zu suchen? Ich weiß, dass Sie in PHP $_SERVER['HTTP_X_FORWARDED_FOR']die weitergeleitete IP-Adresse abrufen können. Ich habe ein paar Dinge ausprobiert, .htaccessaber kein Glück:

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

LÖSUNG

Ich habe folgendes zu tun:

%{HTTP:X-FORWARDED-FOR}
Jake Wilson
quelle
% {HTTP: X-Forwarded-For} ist das richtige. Ist es case sensitive?
Jeff Strunk
Alle Kappen haben für mich funktioniert. Ich denke, es wird nicht zwischen Groß- und Kleinschreibung unterschieden, oder es ist ein Alias ​​oder so.
Jake Wilson
Servieren Sie wirklich .jpeoder .jpDateien?
7heo.tk

Antworten:

9

Verwenden Sie %{HTTP:X-FORWARDED-FOR}anstelle von%{REMOTE_ADDR}

Ryan
quelle
Ich weiß, dass Sie es in Ihrer Frage bereits beantwortet haben, aber Sie hatten keine Antwort darunter. Vielen Dank für Ihre Antwort! Hat mich heute gerettet.
Ryan
2

Du brauchst mod_rpaf . Dieses Modul schreibt REMOTE_ADDR in Apache mit einem anderen Header neu, z. B. x-forwarded-for. Sehr nützlich, damit sich PHP-Apps mit Load Balancern verhalten.

Matthew Ife
quelle
0

Wenn Sie zwei Umgebungen haben, z. B. eine Produktion hinter dem Lastausgleich und eine Entwicklung oder ein Staging, das nicht hinter dem Lastausgleich steht, und dieselbe .htaccess-Datei verwenden möchten, benötigen Sie sowohl% {HTTP: X-FORWARDED-FOR} als auch % {REMOTE_ADDR} - Weisen Sie beiden Bedingungen IP-Adressen zu.

Andrew S.
quelle
1
Auf einigen Apache-Servern verwirrt der Backslash den Server. Einfach ausgedrückt! ^ 123.123.123.123 (ohne Backslashes, dh IP 123.123.123.123), wenn keine Iteration mit Backslashes funktioniert.
Andrew S