.htaccess RewriteCond per REMOTE_ADDR mentre dietro Load Balancer?


9

Ho un server web dietro un bilanciamento del carico.

Devo aggiungere un reindirizzamento condizionale al mio .htaccess per visualizzare una pagina di manutenzione ogni volta che mettiamo il sito offline per manutenzione. Questa parte è semplice:

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

Tuttavia, voglio aggiungere a condizione che se l'indirizzo IP del visitatore è il mio, non mi reindirizzerà alla pagina di manutenzione e che sarei in grado di vedere e testare il sito come se fosse online. Questa parte è normalmente anche semplice:

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]

Tuttavia, poiché il mio server Web si trova dietro un bilanciamento del carico, REMOTE_ADDRviene risolto nell'indirizzo IP interno del server Load Balance.

Come posso modificarlo per cercare l'indirizzo IP inoltrato? So che in PHP puoi usare $_SERVER['HTTP_X_FORWARDED_FOR']per ottenere l'indirizzo IP inoltrato. Ho provato alcune cose in .htaccessma senza fortuna:

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

SOLUZIONE

Ho ottenuto quanto segue per funzionare:

%{HTTP:X-FORWARDED-FOR}

% {HTTP: X-Forwarded-For} è quello corretto. Fa distinzione tra maiuscole e minuscole?
Jeff Strunk,

All Caps ha funzionato per me. Immagino che non faccia distinzione tra maiuscole e minuscole oppure è un alias o qualcosa del genere.
Jake Wilson,

Servite davvero .jpeo .jpfile?
7heo.tk,

Risposte:


10

Usa %{HTTP:X-FORWARDED-FOR}invece di%{REMOTE_ADDR}


So che hai già risposto alla tua domanda, ma non hai avuto una risposta sotto quella corrispondente. La ringrazio per la risposta! Mi hai salvato oggi.
Ryan,

2

Hai bisogno di mod_rpaf . Questo modulo riscriverà REMOTE_ADDR in apache con un'altra intestazione, come x-forwarded-for. Molto utile per far sì che le app PHP si comportino con i bilanciatori del carico.



0

Se hai due ambienti, ad esempio una produzione dietro il bilanciamento del carico e uno sviluppo o una gestione temporanea non dietro il bilanciamento del carico e desideri utilizzare lo stesso file .htaccess, avrai bisogno sia di% {HTTP: X-FORWARDED-FOR} che di % {REMOTE_ADDR}: assegna gli indirizzi IP a entrambe le condizioni.


1
Inoltre, su alcuni server Apache, la barra rovesciata confonderà il server. In poche parole! ^ 123.123.123.123 (senza le barre rovesciate, per indicare se non IP 123.123.123.123) se non riesci a far funzionare un'iterazione con le barre rovesciate.
Andrew S
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.