.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}

% {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}


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.



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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.