Amazon route 53 + cloudfront + s3 -> 在 ec2 中使用 angularjs2 應用程序
我對我的 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.js
s3 (/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 有一個稱為“源路徑”的設置,它是源的屬性,有時人們會與“路徑模式”混淆,後者是記憶體行為的屬性。將“原點路徑”留空,因為它與您要發送到特定原點的路徑無關。