2017-02-15 50 views
2

如果用戶登錄到我的web應用程序(設置了名爲'token'的cookie),我想請求www.myapp.com爲我的s3存儲區提供index.html web應用程序。基於Cookie的Cloudfront服務文件

如果用戶沒有登錄,我希望從我的營銷網站s3存儲桶中獲得index.html。

這在Cloudfront中可能嗎?

回答

0

認爲這可以通過新的[email protected] CloudFront功能來完成。我還沒有真正使用過這個功能,但這是我所知道的唯一一個可以讓您在CloudFront中進行路由的功能。

looks like您可以檢查Lambda @ Edge函數中的HTTP標頭,並將Cookie作爲HTTP標頭髮送。 Cookie頭沒有在restricted headers section中列出,所以它應該暴露給Lambda函數。我認爲這將能夠做到你想要的。

如果您嘗試此操作,請讓我知道它的工作效果。

+0

是的......您可以編輯URI(路徑),但「主機:」標頭是隻讀的,因此內容需要位於同一個存儲桶中。通過轉發和緩存這個cookie(在''Cache Behavior'for'/'中)並重寫Origin Request觸發器中的URI,這可以實現,但這會降低此頁面的命中率,對於擁有cookie的用戶。但即使它是一個應用程序服務器(不是S3),也會遇到同樣的問題。在L @ E不在預覽之前,它只能與每個AWS賬戶的一次分發相關聯。 –

+0

如果您想在這種情況下實際返回30X重定向,而不是返回替代內容,您需要使用Origin Request觸發器將URI重新寫入目標存儲桶中的虛擬頁面,該頁面使用重定向規則實際生成重定向,因爲L @ E無法更改HTTP狀態碼,並且請求標頭當然不適用於響應觸發器。觸發器不能改變實際的響應體。 –

+0

@ Michael-sqlbot感謝您的澄清。這聽起來像是你真的有機會使用L @ E並深入挖掘它。我想知道OP的S3存儲桶和他的網站是否都被配置爲CloudFront發行版的原點,如果這樣可以更容易地完成他想要的功能。 –