更好的方法是什么:使用 Express 或 nginx 提供静态文件?

What's the better approach: serving static files with Express or nginx?

我正在构建一个 Node.js 应用程序,我正在使用 nginx 作为反向代理。我的应用程序有一些我需要提供的静态文件和一个 Socket.io 服务器。

我知道我可以直接使用 Express 提供静态文件(使用 express.static 中间件)。我也可以将 nginx 直接指向我的静态文件所在的目录,这样它们将由 nginx 提供。

那么,问题是:哪种方法更好?使用每种方法时我会面临哪些利弊?

用于开发:express,主要是因为它提供了灵活性...您可以在开发过程中非常轻松地更改静态位置和结构

用于生产:nginx,因为它快得多。 Node/express 适用于执行逻辑,但适用于提供原始内容……没有什么比 nginx 更好的了。您还可以获得其他功能,例如 gzip、负载平衡...

尽管如此,这个问题已经在 Whosebug 中被问过很多次了:参见

  • node.js itself or nginx frontend for serving static files?
  • Using Node.js only vs. using Node.js with Apache/Nginx

The Express documentation explicitly recommends using a reverse proxy where possible. To quote from this article:

Nginx can do a much better job of handling static files and can prevent requests for non-dynamic content from clogging our node processes.

有很多文章讨论了这个主题,并且更加详细,但我肯定会听取 Express 开发人员的建议。