【问题标题】:How to serve static content for a Node.js application?如何为 Node.js 应用程序提供静态内容?
【发布时间】:2016-05-02 02:26:53
【问题描述】:
关于我正在构建的 Node 应用程序的正确服务器基础架构的快速问题。该应用程序有一个使用 Angular 构建的 Web 前端,它使用我在 Node.js 中构建的 API。该 API 最终也将被移动应用程序访问。在服务器基础设施方面,最快/最干净的设置方法是什么?我通常会做一个简单的 3 服务器设置,一个节点服务器、一个 mongodb 服务器和一个 nginx 服务器充当代理,并让节点服务器为 Web 前端提供所有静态文件,但我不确定是否这是这里的最佳做法。所以我的两个问题是:
让 nginx 服务器为 Web 前端提供所有静态内容,只让 Node 提供 API 会更好吗?
该应用程序允许用户上传文件以存储在服务器上。存储和提供这些文件的最佳位置在哪里?
【问题讨论】:
标签:
node.js
api
nginx
server
【解决方案1】:
这是一个基本的 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 或更传统的方法,在您访问之前,所有请求都已完全完成。
您将上传的内容存储在何处由您决定。将文件上传到像 Amazon 的 S3 这样的存储服务而不是在本地存储它们越来越流行。 S3 提供廉价存储、快速带宽和冗余存储,但本地目录也可以满足您的需求。