Amazon-Ec2

Amazon route 53 + cloudfront + s3 -> 在 ec2 中使用 angularjs2 應用程序

  • June 6, 2016

我對我的 angularjs2 應用程序所需的設置感到非常困惑。

它只是一個帶有 html5 模式 url 的 SPA 應用程序,我想要的只是:

  • 請求www.mydomain.com/blabla...將被重定向到同一個 mydomain 但沒有 www
  • 請求mydomain.com/anything/including/path/like/this將提供 s3 (/cloudfront)index.html
  • **如果太難,**請求將從mydomain.com/path/or/not/path/file_that_ends_with_any_extesnion_like.jss3 (/cloudfront) 提供該文件mydomain.com/assets/path/blabla.bla
  • 最後但並非最不重要的請求mydomain.com/api/...將重定向到包含我的 REST API node.js 伺服器的 ec2 實例

通常我只會在 nginx 和 node.js 中使用 1 個 ec2 實例,try_files如果它失敗,它會提供index.html文件,如果 url 是/api/..它會將請求重定向到位於同一個 ec2 上的 api

該設置的問題在於,如果您有超過 1 個 ec2 實例,它的擴展性不好且難以維護

我在Google上看了很多,但我找不到任何指南或部落格文章關於如何設置類似於我在 AWS 雲中描述的內容。

提前致謝 :)

www.mydomain.com/blabla… 的請求將被重定向到同一個 mydomain 但沒有 www

這是通過在 S3 中創建一個名為 的空儲存桶www.example.com,將其配置為將所有請求重定向到不同的主機名 ( example.com) 並將 DNS 指向它來完成的。

如果您希望它在 www 端支持 https 請求重定向,您可以為 www 主機名創建第二個 CloudFront 分配,指向儲存桶的網站終端節點,並將 DNS 指向 CloudFront。

對 mydomain.com/anything/including/path/like/this 的請求將提供 s3 (/cloudfront) index.html

為靜態網站託管配置example.com儲存桶(包含您的內容的儲存桶,而不是上面討論的空儲存桶),並將索引文件名稱設置為 index.html儲存桶的靜態網站託管配置選項。如 S3 文件中所述,當為儲存桶啟用 S3 網站託管功能時,S3 將根據以下規則盡可能自動返回儲存桶中適當位置的命名索引頁面:

  • 如果請求的路徑是/foo/bar/(帶有斜杠),則 S3 使用該鍵查找一個對象foo/bar/index.html並返回它,而瀏覽器的地址欄保持不變。
  • 如果請求的路徑是/foo/bar(沒有尾隨斜杠)並且存在,則 S3 在尾隨出現在瀏覽器的地址欄中後foo/bar/index.html返回重定向到/foo/bar/,這會導致上述行為。/(這是添加尾部斜杠的重定向,是標準的 Web 伺服器行為;否則索引頁面中的相關連結將指向錯誤的目錄)。

在設置 CloudFront 源時,您需要輸入儲存桶的網站終端節點主機名,而不是從 CloudFront 的下拉列表中選擇儲存桶。否則不會啟用索引文件等網站功能:

重要的

不要從列表中選擇您的儲存桶的名稱,例如 example.com.s3.amazonaws.com

http://docs.aws.amazon.com/gettingstarted/latest/swh/getting-started-create-cfdist.html

下一期:

如果太難,對 mydomain.com/path/or/not/path/file_that_ends_with_any_extesnion_like.js 的請求將從 s3 (/cloudfront) 提供該文件,我還可以設置我的網站,以便所有資產都在 assets 文件夾中對 mydomain.com/assets/path/blabla.bla 的請求將從 s3 (/cloudfront) 提供靜態文件

您可以配置 CloudFront 以選擇將請求發送到哪個“源”(後端系統),使用記憶體行為,每個行為都匹配一個路徑模式。聽起來,在這種情況下,您希望您的預設記憶體行為指向儲存桶,如果不匹配另一個記憶體行為,它將在那裡發送所有請求。

最後但並非最不重要的一點是對 mydomain.com/api/… 的請求將重定向到包含我的 REST API node.js 伺服器的 ec2 實例

大概您並不是真的指“重定向”,而是指對 EC2 實例的“轉發”或“代理”(同樣的事情)請求。

將 EC2 實例聲明為您站點的 CloudFront 分配中的另一個源。創建一個/api/*使用此源的新記憶體行為匹配路徑模式,CloudFront 會將這些請求發送到您的 EC2 實例。

確保您在 EC2 上的程式碼在Cache-Control:API 響應中返回適當的標頭,以便 CloudFront 將它們記憶體一段適當的時間,或者在您返回時根本不記憶體它們Cache-Control: no-cache

請注意,在記憶體行為路徑模式中,缺少前導斜杠是隱式的,因此api/*等效於/api/*.

另請注意,CloudFront 有一個稱為“源路徑”的設置,它是源的屬性,有時人們會與“路徑模式”混淆,後者是記憶體行為的屬性。將“原點路徑”留空,因為它與您要發送到特定原點的路徑無關。

引用自:https://serverfault.com/questions/782145