node.js - Nginx 用于 Node JS 应用程序中的身份验证和授权

标签 node.js express nginx

我正在使用 expressJS 在 nodejs 中开发应用程序,为了优化性能,我决定将 Nginx 与 NodeJS 一起使用(根据我的结论,在阅读了很多关于 Nginx + NodeJS 的文章之后)。
我将 Nginx 和 NodeJS 的任务划分如下:

Nginx

  1. 提供静态文件
  2. 身份验证
  3. 授权

Node JS

  1. 与数据库交互的动态 API 处理

以上述方式设计应用程序是个好主意吗?
如果是,那么如何使用 Nginx 在 Node JS 应用程序中处理身份验证和授权?
如果不是,那么在 NodeJS 应用程序中处理负载的更好方法是什么?

最佳答案

您的概念存在根本性缺陷。 Nginx 的速度很快,可以通过 http 提供内容。将 nginx 放在 node.js 的前面不会提供任何性能改进。 Nginx 可以用作负载均衡器,在多个主机之间平均分配流量,但它本身并没有提供任何性能优势,除了它非常高效。那就是说 Nginx 不打算处理授权/身份验证,除了 http 基本身份验证。

您应该编写自己的逻辑来处理身份验证和授权。要扩展,您应该无状态地编写代码,以便您可以跨多个服务器运行。因此,您应该将 session 数据存储在诸如内存缓存之类的地方,或者使用类似 JWT 的东西创建无状态系统。 .

此外,您不应使用 node.js 提供内容。 Nginx 在这方面更快。所以只使用 Node.js 提供模板,允许 Nginx 缓存和提供静态内容。此范例还允许您利用内容分发网络。这是利用 nginx 擅长的内容服务的唯一真正方法。

优化并不是让事情变得超快。当您遇到性能障碍或需要提高系统效率以防止过早扩展时,就会发生优化。

关于node.js - Nginx 用于 Node JS 应用程序中的身份验证和授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28956480/

相关文章:

javascript - 缓存并避免重新加载 html、css 和 js 文件

mysql - 如何在sequelize、node js中使用like in where条件

javascript - 如何在 Node.js 中打印堆栈跟踪?

javascript - Coffeekup 作为 Express 3 的 View 引擎

django - nginx 不会在某些端口上响应

php - 如何检测 PHP 中的 X-Accel-Redirect (Nginx)/X-Sendfile (Apache) 支持?

node.js - 在 express js res.render 之前发出 http 请求以获取 JSON

javascript - 在 setTimeout 中调用异步函数

javascript - Node JS在ejs文件中加载js和css文件

nginx - Elasticsearch : Connection refused while connecting to upstream