如何为Node.js应用程序提供静态内容?

时间:2016-01-25 17:15:25

标签: node.js api nginx server

关于我正在构建的Node应用程序的正确服务器基础结构的快速问题。该应用程序有一个使用Angular构建的Web前端,它使用我在Node中构建的API。此API最终也将由移动应用程序访问。在服务器基础设施方面,最快/最干净的方法是什么?我通常会做一个简单的3服务器设置,一个节点服务器,一个mongodb服务器和一个nginx服务器充当代理,并让节点服务器为web前端提供所有静态文件,但我不是确定这是否是最好的做法。所以我的两个问题是:

  1. 让nginx服务器为Web前端提供所有静态内容并且只有Node为API提供服务会更好吗?

  2. 该应用程序允许用户上传要存储在服务器上的文件。存储和提供这些文件的最佳位置在哪里?

2 个答案:

答案 0 :(得分:0)

这是一个基本的Nginx配置,用于服务静态内容并传递 Node.js应用程序的其他所有内容:

    location / {
      try_files $uri $uri/ @backend;
    }

    location @backend {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://127.0.0.1:3000;
      proxy_redirect off;
    }

我建议让Nginx提供静态内容,因为Nginx做得很好,可以释放Node.js,专注于为应用程序提供更少的请求。

文件上传在Node.js中处理。在Nginx中处理的唯一部分是调整文件上载大小限制。您可以根据需要将此限制为特定location块:

client_max_body_size 20m;

Node.js有几个文件上传包。您可以选择使用事件界面流式传输上传的解决方案,例如connect-busboy或更传统的方法,其中所有请求在您访问之前完全完成。

存储上传内容取决于您。将文件上传传递到亚马逊S3等存储服务而不是在本地存储它们越来越受欢迎。 S3提供廉价存储,快速带宽和冗余存储,但本地目录也可满足您的需求。

答案 1 :(得分:0)

根据您的应用程序的要求,我使用的设置是:

  • 用于node.js网络服务的Heroku(使用mongodb或postgresql作为数据库)
  • 亚马逊对我的静态资产的s3,如果他们需要私密,您可以设置一个云端分发,用于从您的s3存储桶提供私有资产。

如果您正在寻找快速而干净的话,我真的建议您使用heroku,但这又取决于您的具体要求。

https://devcenter.heroku.com/articles/getting-started-with-nodejs#introduction