.htaccess RewriteCond untuk REMOTE_ADDR saat berada di belakang Load Balancer?

9

Saya memiliki server web di belakang load-balancer.

Saya perlu menambahkan pengalihan bersyarat ke .htaccess saya untuk menampilkan halaman pemeliharaan setiap kali kami membuat situs offline untuk pemeliharaan. Bagian ini mudah:

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

Namun saya ingin menambahkan dalam kondisi bahwa jika alamat IP pengunjung adalah milik saya, itu tidak akan mengarahkan saya ke halaman pemeliharaan dan bahwa saya akan dapat melihat dan menguji situs seolah-olah sedang online. Bagian ini biasanya juga mudah:

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]

Namun, karena server web saya berada di belakang load balancer, REMOTE_ADDRdiselesaikan ke alamat IP internal server Load Balance.

Bagaimana saya bisa mengubah ini untuk mencari alamat IP yang diteruskan? Saya tahu di PHP Anda bisa menggunakan $_SERVER['HTTP_X_FORWARDED_FOR']untuk mendapatkan alamat IP yang diteruskan. Saya sudah mencoba beberapa hal .htaccesstetapi tidak berhasil:

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

LARUTAN

Saya mendapat yang berikut ini untuk bekerja:

%{HTTP:X-FORWARDED-FOR}
Jake Wilson
sumber
% {HTTP: X-Forwarded-For} adalah yang benar. Apakah ini case sensitif?
Jeff Strunk
Semua Caps bekerja untuk saya. Saya kira itu tidak peka huruf besar-kecil atau kalau tidak alias atau semacamnya.
Jake Wilson
Apakah Anda benar-benar melayani .jpeatau .jpfile?
7heo.tk

Jawaban:

10

Gunakan %{HTTP:X-FORWARDED-FOR}sebagai ganti%{REMOTE_ADDR}

Ryan
sumber
Saya tahu Anda sudah menjawabnya dalam pertanyaan Anda, tetapi Anda tidak memiliki jawaban di bawah yang cocok. Terima kasih atas jawaban Anda! Selamatkan saya hari ini.
Ryan
2

Anda perlu mod_rpaf . Modul ini akan menulis ulang REMOTE_ADDR di apache dengan header lainnya, seperti x-forwarded-for. Sangat berguna untuk membuat aplikasi PHP berperilaku dengan penyeimbang beban.

Matthew Ife
sumber
0

Jika Anda memiliki dua lingkungan, katakan satu produksi di belakang keseimbangan beban dan pengembangan atau pementasan tidak di belakang keseimbangan beban, dan Anda ingin menggunakan file .htaccess yang sama, Anda akan membutuhkan% {HTTP: X-FORWARDED-FOR} dan % {REMOTE_ADDR} - tetapkan alamat IP untuk kedua kondisi.

Andrew S
sumber
1
Juga, pada beberapa server apache, backslash akan membingungkan server. Sederhananya! ^ 123.123.123.123 (tanpa garis miring terbalik, artinya jika bukan IP 123.123.123.123) jika Anda tidak bisa mendapatkan iterasi dengan garis miring terbalik bekerja.
Andrew S