AWS offre-t-il un moyen d'acheminer le trafic HTTPS vers deux instances EC2 différentes en fonction du chemin de répertoire?

10

Je me demandais si ce qui suit est possible avec les offres AWS?

https://www.example.com/a/-> servi par Apache sur l' EC2 Instance A

https://www.example.com/b/-> servi par Apache sur l' EC2 Instance B

Pour clarifier, je ne veux pas que les fichiers sous un chemin de répertoire soient sur la même instance de serveur que les fichiers sous l'autre chemin de répertoire.

Je comprends que cela peut être possible avec un proxy quelconque, mais existe-t-il une solution plus simple avec l'une des offres AWS.

L' équilibreur de charge EC2 ne semble pas autoriser la commutation en fonction du chemin du répertoire. Route 53 fonctionne au niveau DNS, qui n'a pas d'informations sur le chemin pour renvoyer les adresses IP en fonction de cela.

Joseph Shih
la source
L'équilibreur de charge EC2 est si stupide qu'il ne lira pas les en- Host:têtes et ne filtrera pas le trafic bidon. Il semble peu probable qu'ils ajoutent des fonctionnalités comme celles que vous demandez si regarder les en-têtes est trop de travail pour eux. Heureusement, ils ont d'autres options.
poussins

Réponses:

29

Utilisez l' AWS Application Load Balancer , qui effectue le routage basé sur le chemin . Ce deuxième lien est un tutoriel sur la façon de le faire.

En bref, vous configurez votre ALB normalement, puis suivez ces étapes (copiées à partir du didacticiel AWS):

  • Sous l' onglet Écouteurs , utilisez la flèche pour afficher les règles de l'écouteur, puis choisissez Ajouter une règle . Spécifiez la règle comme suit:

  • Pour Nom du groupe cible , choisissez le deuxième groupe cible que vous avez créé.

  • Pour Modèle de chemin, spécifiez le modèle exact à utiliser pour le routage basé sur le chemin (par exemple, / img / *). Pour plus d'informations, voir Règles d'écoute.

  • Choisissez Enregistrer .

Tim
la source
Merci! J'ai vérifié EC2 Application Load Balancer à l'origine, j'ai suivi l'assistant, mais je n'en ai jamais créé un. L'assistant n'a pas donné d'option de chemin. Comme l'a souligné le didacticiel, il faut d'abord le créer, puis modifier les règles par la suite.
Joseph Shih
9

En plus de l'excellente réponse de Tim, vous pouvez également y parvenir avec CloudFront .

Commencez par créer votre distribution en ajoutant des origines pour les instances EC2 A et EC2 B (qui peuvent également être des équilibreurs de charge, des hôtes non AWS ou même des compartiments S3).

Ensuite, configurez les règles de comportement du cache pour mapper / a / * et / b / * aux origines appropriées.

La pertinence d'utiliser CloudFront à cette fin dépendra de votre application et du besoin d'un CDN.

Zach Lipton
la source
4
Cela pourrait aussi demander si vous voulez /a*et /b*être géré par différents services, différents comptes, les différentes régions, ou même un chemin manipulé par quelque chose en cours d' exécution à l' intérieur AWS et l'autre ailleurs. CloudFront a de nombreux cas d'utilisation qui ne nécessitent aucun concept de CDN.
Michael - sqlbot