Apakah AWS menawarkan cara untuk mengarahkan lalu lintas HTTPS ke dua instance EC2 berbeda berdasarkan jalur direktori?

10

Saya bertanya-tanya apakah yang berikut ini mungkin dengan penawaran AWS?

https://www.example.com/a/-> dilayani oleh Apache pada EC2 Instance A

https://www.example.com/b/-> dilayani oleh Apache pada EC2 Instance B

Untuk memperjelas, saya tidak ingin file di bawah satu jalur direktori berada pada contoh server yang sama dengan file di bawah jalur direktori lainnya.

Saya mengerti ini mungkin dengan proxy dari beberapa jenis, tetapi apakah ada solusi yang lebih mudah dengan salah satu penawaran AWS.

The EC2 Load Balancer tampaknya tidak memungkinkan switching yang berdasarkan jalur direktori. Rute 53 berfungsi di tingkat DNS, yang tidak memiliki informasi jalur untuk mengembalikan IP berdasarkan itu.

Joseph Shih
sumber
Penyeimbang beban EC2 sangat bodoh sehingga tidak akan membaca Host:tajuk dan menyaring lalu lintas palsu. Tampaknya tidak mungkin mereka akan menambahkan fitur apa pun yang Anda minta jika melihat header terlalu banyak untuk mereka. Untungnya mereka memiliki pilihan lain.
anak ayam

Jawaban:

29

Gunakan Penyeimbang Beban Aplikasi AWS , yang melakukan Routing Berbasis Path . Tautan kedua itu adalah tutorial cara melakukannya.

Singkatnya, Anda mengatur ALB Anda seperti biasa, lalu ikuti langkah-langkah ini (disalin dari tutorial AWS):

  • Pada tab Pendengar , gunakan panah untuk melihat aturan untuk pendengar, lalu pilih Tambahkan aturan . Tetapkan aturan sebagai berikut:

  • Untuk nama grup Target , pilih grup target kedua yang Anda buat.

  • Untuk pola Path, tentukan pola yang tepat untuk digunakan untuk routing berbasis jalur (misalnya, / img / *). Untuk informasi lebih lanjut, lihat Aturan Pendengar.

  • Pilih Simpan .

Tim
sumber
Terima kasih! Saya telah memeriksa Aplikasi Load Balancer EC2 pada awalnya, pergi melalui wizard, tetapi tidak pernah benar-benar membuatnya. Wizard tidak memberikan opsi jalur. Seperti yang ditunjukkan oleh tutorial, kita harus membuatnya terlebih dahulu dan kemudian mengedit aturan setelahnya.
Joseph Shih
9

Selain jawaban Tim yang luar biasa, Anda juga dapat mencapainya dengan CloudFront .

Pertama, buat distribusi Anda , tambahkan asal untuk EC2 Instance A dan EC2 Instance B (yang juga bisa menjadi penyeimbang beban, host non-AWS, atau bahkan bucket S3).

Kemudian, atur aturan perilaku cache untuk memetakan / a / * dan / b / * ke asal yang sesuai.

Baik atau tidaknya menggunakan CloudFront untuk tujuan ini akan tergantung pada aplikasi Anda dan kebutuhan untuk CDN.

Zach Lipton
sumber
4
Ini juga dapat berlaku jika Anda ingin /a*dan /b*ditangani oleh berbagai layanan, akun berbeda, wilayah berbeda, atau bahkan satu jalur yang ditangani oleh sesuatu yang berjalan di dalam AWS dan jalur lainnya di tempat lain. CloudFront memiliki banyak kasus penggunaan yang secara konseptual tidak memerlukan CDN sama sekali.
Michael - sqlbot