在什么情况下,人们更喜欢使用Node.js在实际部署中仅作为服务器?

当一个人不想使用Node时.仅限js, node 的性能更好.js?Apache还是Nginx?

推荐答案

有几个很好的理由可以将另一个Web服务器粘贴到 node 前面.js:

  • 不必担心 node 的特权/setuid.js过程.通常只有root用户可以绑定到端口80.如果你让nginx/Apache担心从root开始,绑定到端口80,然后放弃其root权限,这意味着你的 node 应用不必担心它.
  • 提供静态文件,如图像、css、js和html.与使用适当的静态文件web服务器相比,Node的效率可能更低(在某些情况下,Node可能也更快,但这不太可能是常态).除了更高效地提供文件服务外,您不必像在 node 外提供服务时那样处理ETag或缓存控制头.有些框架可能会为您处理这个问题,但您需要确定.不管怎样,还是可能更慢.
  • 正如Matt Sergeant在回答中提到的,如果 node 服务崩溃,您可以更轻松地显示有意义的错误页面,或者返回到静态站点.否则,用户可能只会获得超时连接.
  • 在 node 前面运行另一台web服务器可能有助于缓解针对 node 的安全漏洞和DoS攻击.以现实世界为例,CVE-2013-4450等于prevented by running something like Nginx in front of Node.

我要警告第二点,你可能应该通过CDN或Varnish这样的缓存服务器来提供静态文件.如果您正在这样做,那么源 node 是Node、Nginx还是Apache实际上并不重要.

Caveat with nginx specifically: if you're using websockets, make sure to use a recent version of nginx (>= 1.3.13), since it only just added support for upgrading a connection to use websockets.

Node.js相关问答推荐

为什么请求正文未定义?

无法在我的 node 项目中转让Google Drive v3 API中的所有权

如何在Firebase Cloud Function v2计划函数中设置代码中的时区?

如何使用多个参数完成

使用更新版本仍然找到包@angular/fire但不支持原理图

当try 将 formData 转换为 express js 时,服务器无法识别 multipart/form-data

如何使用 node 在 koa.js 中发送响应

错误:无法检测到网络(event="noNetwork",code=NETWORK_ERROR,version=providers/5.6.8)

是Electron 的密码和登录凭据的安全存储吗?

如何promise AWS JavaScript 开发工具包?

与 NPM 一起安装时找不到 Express 模块

如何在 node 调试器中禁用第一行中断

使用 Node.JS,如何按时间顺序获取文件列表?

Node_redis - 如何删除密钥?

带有加密的nodejs中的SALT和HASH密码

在 Jade 包含中使用变量

使用 node 的内置调试器判断变量?

Meteor - collection.find() 总是返回所有字段

Nodejs将字符串转换为UTF-8

`return function *(){...}` 是什么意思?