【问题标题】: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 前端提供所有静态文件,但我不确定是否这是这里的最佳做法。所以我的两个问题是:

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

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

【问题讨论】:

    标签: 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 提供廉价存储、快速带宽和冗余存储,但本地目录也可以满足您的需求。

    【讨论】:

      【解决方案2】:

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

      • Heroku 用于 node.js Web 服务(使用 mongodb 或 postgresql 用于 db)
      • Amazon 的 s3 用于我的静态资产,如果它们需要是私有的,您可以设置一个云端分发,以便从您的 s3 存储桶中提供私有资产。

      如果您想要快速和干净,我真的建议您使用 heroku,但同样取决于您的具体要求。

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

      【讨论】:

        猜你喜欢
        • 2010-11-30
        • 2015-05-24
        • 2018-09-28
        • 2020-03-06
        • 1970-01-01
        • 2017-04-17
        • 2016-01-22
        • 2016-09-14
        • 1970-01-01
        相关资源
        最近更新 更多