AWS Cloud Front: So fordern Sie den Ursprung mit der richtigen URL an

AWS Cloud Front: So fordern Sie den Ursprung mit der richtigen URL an

Ich versuche, eine Website zu cachen, die sich auf einem EC2 befindet. Sie hat eine URL uncached.xyz.com. Deshalb habe ich eine Cloud Front erstellt, auf die der Ursprung verweist, uncached.xyz.comund einen Datensatz erstellt xyz.com, der auf die Cloudfront-Verteilung verweist und ungefähr so ​​benannt ist d111111abcdef8.cloudfront.net:

Aber alle vom Server zurückgegebenen Informationen (wie etwa Schaltflächen-URLs) sind nicht relativ und umfassen die Anforderungs-URL. Das bedeutet, dass, wenn Cloudfront mit auf den Ursprung zugreift uncached.xyz.com, der vom CDN zurückgegebene Inhalt (für jeden verwendeten CNAME) die Ursprungs-URL und nicht die URL enthält, die für den Zugriff auf die CloudFront-Verteilung verwendet wurde, und so aussieht wie ein , <a href="uncached.xyz.com/info"><a>wo es sein sollte <a href="xyz.com/info"><a>.

tl:dr

CloudFront sollte Folgendes zurückgeben:
<a href="xyz.com/info"><a> (das ist die aufgerufene URL, die auf die CDN-Verteilung (die zwischengespeicherte Website) verweist.)
Es gibt jedoch Folgendes zurück:
<a href="uncached.xyz.com/info"><a> (das ist die Ursprungs-URL, die die zwischenzuspeichernden Daten (die Website) enthält.)

Gibt es eine Möglichkeit, den Ursprungsserver zu „fälschen“, sodass er denkt, die für den Zugriff verwendete URL sei die CloudFront-Verteilung und nicht die konfigurierte Ursprungs-URL?

Einfachere Version von dem, was ich verwende.

Beispielarchitektur

Antwort1

Hierfür gibt es mehrere Möglichkeiten:

Legen Sie die Header X-Forwarded-Host und X-Forwarded-Proto in der Cloudfront-Konfiguration für Ursprungsanfragen fest, um die erforderlichen Informationen an die Backend-Anwendung weiterzuleiten. Verwenden Sie im Backend die Header, falls vorhanden, zum Generieren des Inhalts innerhalb der Seiten.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Host

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto

Ein anderer Ansatz könnte darin bestehen, ein Lambda@Edge einzurichten, das die ursprüngliche Antwort verarbeitet und den Inhalt bei Bedarf ersetzt.

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-updating-http-responses.html

verwandte Informationen