2017-05-22 29 views
1

我在單個AWS EC2實例上運行Nodejs和Angularjs應用程序。應用程序的代碼結構如下:如何將AWS EC2上運行的Nodej和AWS S3上的靜態Angularjs內容集成在一起?

Code Structure

目前,當用戶嚮應用程序中的第一個呼叫,該呼叫是通過明示的NodeJS框架處理,並且呼叫被引導至的index.html角靜態目錄內頁,使用下面的代碼在服務器/ server.js文件

res.sendFile(path.resolve(__dirname + '/../web/dist/index.html')); 

從index.html的,各種靜態組件(JS,HTML,CSS等)被調用,所有angularjs控制器/服務做出回調到nodejs API以滿足用戶請求。

這種安排在單個實例中正常工作。現在我想將有角度的靜態內容(即web目錄移動到AWS S3)。這樣做,我要在server.js修改下面的代碼:

res.sendFile(path.resolve('**AWS S3 URL** +/web/dist/index.html')); 

我的靜態文件現在已經轉移到AWS S3。此外,在這樣做時,我必須修改所有角度控制器和服務以使用絕對路徑來調用Nodejs API。這意味着需要進行大量更改並引入部署配置(我們必須稍後才能實現靈活性)。

另一種方法,我們可以採取的是移動的index.html從網絡到服務器文件夾通過在服務器/ server.js以下變化:

res.sendFile(path.resolve(__dirname + '/../server/index.html')); 

然後添加以下代碼server.js處理重定向從到的NodeJS S3的靜態內容,這樣的事情:

app.get('/assets/*', function(req, res){ 
    var requestURL = req.url; 
    var redirectedURL = <<**Remote S3 base URL**>> + requestURL; 
    res.redirect(redirectedURL); 
}); 

然而,值得關注的是會有很多的重定向,我想知道,如果這是一個好的設計?我已經閱讀過,搜索引擎不喜歡有很多重定向的應用程序(HTTP 301,304),並將這些頁面排在較低的位置。因此,我試圖找出在AWS EC2上部署nodejs和在S3上部署靜態angularjs內容時的最佳做法。任何意見將不勝感激。

+0

沒有任何需要重定向。您應該直接從S3中爲您的靜態Web內容提供服務,這可以通過爲您的資源使用S3 URL來實現。這也將減少服務器的負載。 – user818510

+0

您是否建議通過瀏覽器直接訪問index.html(在S3中),而不是通過nodejs將調用轉發給index.html,並且使用絕對NodejS API URL更新S3中的所有角度控制器。 – Dev

回答

0

您可以通過將s3網址文件添加到您的index.html中,直接從s3訪問您的內容。

如果你想爲s3服務index.html那麼你必須重定向index.html到s3,其他所有你可以直接從s3加載到瀏覽器。

如果你真的想快速成爲公共內容我會建議使用CloudFront的是一個選項,在這裏你可以成爲你的所有公開從CloudFront的直接內容,而來到你的節點服務器和所有API調用會來到你的節點服務器。但是,這取決於您的應用程序的體系結構。

+0

非常感謝您的回覆。是的,最終目標是將雲端用作CDN。 – Dev

相關問題