2017-05-22 4 views
1

Ich habe eine Nodejs- und Angularjs-Anwendung, die auf einer einzigen AWS EC2-Instanz ausgeführt wird. Die Codestruktur der Anwendung ist wie folgt:Wie integriert man Nodejs, die auf AWS EC2 laufen, und statische Angularjs-Inhalte auf AWS S3?

Code Structure

Derzeit wird, wenn ein Benutzer den ersten Aufruf der Anwendung macht, wird der Anruf durch NodeJS Express Rahmen abgewickelt, und der Anruf wird an die index.html gerichtet Seite innerhalb Winkel statischen Verzeichnis, mit dem folgenden Code in Server/server.js Datei

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

Von index.html, stellen verschiedene statische Komponenten (JS, HTML, CSS usw.) aufgerufen werden und alle AngularJS Controller/Dienstleistungen ein Rufen Sie zur Erfüllung der Benutzeranforderung zurück zur Nodejs-API auf.

Diese Anordnung funktioniert gut in Einzelinstanz. Jetzt möchte ich den eckigen statischen Inhalt (d. H. Web-Verzeichnis zu AWS S3) verschieben. Dabei muss ich auf den folgenden Code in server.js ändern:

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

als meine statische Dateien jetzt AWS S3 verschoben haben. Außerdem muss ich alle Winkelsteuerungen und den Dienst so ändern, dass der absolute Pfad zum Nodejs-API-Aufruf verwendet wird. Das bedeutet, viele Änderungen vorzunehmen und die Deployment-Konfiguration einzuführen (die wir sowieso zu einem späteren Zeitpunkt aus Gründen der Flexibilität haben müssen).

Ein weiterer Ansatz, den wir machen können, ist bewegen index.html von Web-Server-Ordner, indem Sie die folgenden Änderungen in Server/server.js machen:

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

dann den folgenden Code in server.js in den Griff Umleitungen für statische Inhalte von NodeJS bis S3, etwa so:

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

es ist jedoch die Sorge, wird viele Umleitungen und ich frage mich, ob das ein gutes Design? Ich habe gelesen, dass Suchmaschinen Anwendungen mit vielen Redirects (HTTP 301, 304) nicht mögen und diese Seiten niedriger einordnen. Daher versuche ich herauszufinden, was bei der Bereitstellung von nodejs in AWS EC2 und statischen angularjs-Inhalten in S3 am besten ist. Jeder Rat wird sehr geschätzt.

+0

Umleitungen sind nicht erforderlich. Sie sollten Ihren statischen Webinhalt direkt von S3 aus bereitstellen, indem Sie S3-URLs für Ihre Ressourcen verwenden. Dies reduziert auch die Belastung Ihres Servers. – user818510

+0

Schlägst du vor, dass auf index.html (in S3) direkt über den Browser zugegriffen werden sollte, anstatt über nodejs den Aufruf an index.html weiterzuleiten, und auch alle Winkelsteuerungen in S3 mit absoluter NodejS-API-URL zu aktualisieren. – Dev

Antwort

0

Sie können direkt von s3 auf Ihre Inhalte zugreifen, indem Sie s3 URLs Ihrer Dateien in Ihre index.html einfügen.

Und wenn Sie index.html auch von s3 dienen möchten, dann müssen Sie index.html eins zu s3 umleiten und alle anderen können Sie direkt in den Browser von s3 laden.

Wenn Sie wirklich schnell öffentliche Inhalte dienen wollen, würde ich Cloudfront eine Option vorschlagen, in dem Sie alle Ihre öffentlichen Inhalte direkt von Cloudfront ohne kommen auf Ihre Knotenserver würde und alle api Anrufe kommen zu Ihrem Knoten-Server dienen kann . Aber das hängt von der Architektur Ihrer Anwendung ab.

+0

Vielen Dank für Ihre Antwort. Ja, letztendlich ist es das Ziel, Cloudfront als CDN zu verwenden. – Dev