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_ADDR
wird 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, .htaccess
aber 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}
.jpe
oder.jp
Dateien?Antworten:
Verwenden Sie
%{HTTP:X-FORWARDED-FOR}
anstelle von%{REMOTE_ADDR}
quelle
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.
quelle
http://blog.janjonas.net/2010-01-04/apaches-mod_rewrite-mod_proxy-use-reverse-proxy-request-headers-for-rewrite-rules
Könnte dies die Antwort sein?
quelle
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.
quelle