Bagaimana cara saya mengonfigurasi pemeriksaan kesehatan ELB ketika menggunakan NameVirtualHosts dan mengalihkan ke www?

8

ELB saya terus mengeluarkan instance saya dari layanan, karena pemeriksaan kesehatan HTTP gagal.

Kami memiliki wildcard DNS, dan mengarahkan semuanya ke www:

vhost.conf:

ServerName www.example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Ini berfungsi dengan baik untuk browser yang sebenarnya, tetapi pemeriksaan kesehatan HTTP ke / gagal, mungkin karena mendapatkan 302.

Apakah opsi terbaik untuk menggunakan pemeriksaan kesehatan TCP, atau apakah ada cara agar HTTP berfungsi?

chris
sumber
Cukup gunakan pemeriksaan kesehatan TCP hingga AWS memungkinkan penyesuaian header host yang dikirim untuk pemeriksaan kesehatan. Bahkan dengan entri default pada server web Anda, Anda sebenarnya tidak memeriksa kesehatan aplikasi Anda, hanya server web Anda yang hampir sama dengan memeriksa apakah port tcp terbuka.
Pykler

Jawaban:

11

Pertanyaan ini telah diajukan di forum AWS dan jawabannya adalah mengatur vhost default yang menangani lalu lintas pada alamat IP telanjang dan tidak melakukan pengalihan. Ini berarti bahwa pengguna normal yang menekan alamat IP Anda tidak akan dialihkan.

Anda juga dapat menentukan bagian jalur dari URL yang Anda inginkan ELB untuk meminta dan mengabaikan jalur itu dengan menambahkan RewriteCond lain:

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/health-check$
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Pengguna normal yang menekan URL itu tidak akan diarahkan.

Anda juga bisa menggunakan teknik yang sama untuk mendeteksi Agen-Pengguna ELB.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Pengguna normal yang memalsukan Agen Pengguna mereka tidak akan dialihkan.

Atau alamat IP internal ELB.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REMOTE_ADDR} !^10\.
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Agar opsi ini berfungsi, Anda akan memerlukan mod_rpaf(untuk Apache 2.2) atau mod_remoteip(untuk Apache 2.4) untuk memodifikasi REMOTE_ADDRvariabel agar mengandung bagian yang benar dari isi X-Forwarded-Forheader. Selama Anda mengaturnya dengan benar, seharusnya tidak mungkin bagi pengguna normal untuk menghindari respons pengalihan.

Ladadadada
sumber
Masalah dengan pengaturan vhost default adalah bahwa alamat IP akan berubah setiap kali instance baru diputar atau di-reboot, dan saya ingin AMI default saya untuk menyertakan dukungan untuk pemeriksaan kesehatan. Saya akan melihat ke opsi lain.
chris
Pemeriksaan alamat IP yang saya sertakan hanya memeriksa bahwa alamat IP dimulai 10.. Bagian alamat IP lainnya dapat berubah sebanyak yang mereka inginkan dan mereka akan tetap cocok. The 10.*.*.*(atau 10.0.0.0/8) kisaran alamat IP tidak routable melalui internet.
Ladadadada
Saya sudah menggunakan IP jarak jauh untuk mencatat alamat IP pemohon (sebagai lawan dari ELB IP) sehingga opsi ke-3 bekerja - terima kasih!
chris
0

Menambahkan host virtual bukanlah ide yang baik, karena kita harus me-restart layanan httpd untuk host virtual agar tercermin. Ada cara alternatif untuk melakukan ini

  1. Abaikan jalur Pemeriksaan Kesehatan ELB dalam file .htaccess,
    pisahkan keempat bagian nama dns seperti berikut
    elb_dns_name: elb-name.subnet_zone.elb.amazonaws.com
  2. Untuk semua url yang tersisa ada aturan penulisan ulang internal
    directory_scructure: code_folder / website

    RewriteEngine Pada
    RewriteCond% {HTTP_HOST}! $ [NC]
    RewriteCond% {REQUEST_URI}! ^ / Index.php $
    RewriteRule ^ (. *) $ / $ 1 [L, QSA]

Ini bekerja sangat baik untuk saya. Tolong sarankan jika ada metode yang lebih baik bersorak!

ravibalgi
sumber