
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.com
und 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.
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.