V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cat
V2EX  ›  Node.js

不懂就问: node.js 做静态资源服务器如何?

  •  2
     
  •   cat · 2020-09-09 23:02:41 +08:00 via iPhone · 6091 次点击
    这是一个创建于 1314 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有个轻业务,访问量不大,后端已经用 koa 写了,现在需要提供图片及其它文件给前端,请问可以直接在 koa 中返回文件的 stream 吗?

    如果文件比较大( 100M 以内)是否还合适?

    以前都是由 nginx 提供,现在为了省一个流程,想用 koa 直接做 http server
    第 1 条附言  ·  2020-09-10 00:33:54 +08:00
    希望各位大佬在水一句用 nginx 的时候,能给出原因,比如测试对比、比如 node.js 的坑,比如实践结论 等等。
    32 条回复    2020-11-20 12:08:18 +08:00
    Danswerme
        1
    Danswerme  
       2020-09-09 23:06:46 +08:00 via Android
    一般不都是 nginx 做静态资源服务器,然后其他请求用 proxy_pass 转发给后面的 koa 之类的么?你这是直接用的 koa ?
    haleyao
        2
    haleyao  
       2020-09-09 23:08:49 +08:00
    应该是可以的吧
    这有个基准测试
    centminmod.com/siegebenchmarks/2013/020313/
    cat
        3
    cat  
    OP
       2020-09-09 23:11:36 +08:00 via iPhone
    @Danswerme 对…
    opengps
        4
    opengps  
       2020-09-09 23:13:26 +08:00 via Android
    静态资源服务器。。直接一个站点目录就是了,何必用 node 绕一层?
    zengming00
        5
    zengming00  
       2020-09-09 23:20:25 +08:00
    大胆用,出问题再说
    xcatliu
        6
    xcatliu  
       2020-09-09 23:28:40 +08:00 via iPhone
    可以的,我在司内搭了一个类似 gh-pages 的服务,就是用 koa 做静态服务,日访问挺大的,还有人放视频,都用起来没问题。
    cat
        7
    cat  
    OP
       2020-09-09 23:40:04 +08:00
    @haleyao 谢谢大佬

    @xcatliu 听起来不错
    wangyzj
        8
    wangyzj  
       2020-09-09 23:42:34 +08:00
    nginx 不就行了?
    cat
        9
    cat  
    OP
       2020-09-09 23:43:58 +08:00
    @wangyzj 项目需要 能少就少
    wunonglin
        10
    wunonglin  
       2020-09-09 23:56:23 +08:00
    @cat #9 不对不对,用 nginx 不比你 node 性能还好?能少就少是指什么
    foru17
        11
    foru17  
       2020-09-10 00:08:27 +08:00
    建议 nginx,或者静态资源放外部 cdn,哪怕丢其他服务器都好。
    cat
        12
    cat  
    OP
       2020-09-10 00:29:42 +08:00 via iPhone
    @wunonglin

    根据上面的链接,node.js 性能更好;

    我发帖问的目的就是想知道,就算 node.js 比 nginx 差,是差多少?在哪种场景差最多?根据对比来决定用不用 node.js 。

    回个贴说用 nginx 是很容易,但项目需要只有自己清楚,如果各位在用 node.js 做类似事情的时候踩过坑,或者了解过一些对比,非常欢迎给出来 互相讨论 互相参考,我相信比一句用 nginx 更有价值。
    duan602728596
        13
    duan602728596  
       2020-09-10 00:32:48 +08:00 via iPhone
    用呗,访问量不大的话,还没到考虑性能的时候
    shynome
        14
    shynome  
       2020-09-10 00:33:07 +08:00 via Android   ❤️ 1
    nodejs 单线程只吃一个核比不得 nginx 吃满的
    shynome
        15
    shynome  
       2020-09-10 00:36:46 +08:00 via Android
    @cat 上面的链接并没有给出代码及可重现的步骤,所以测试结果不具有可信度
    xcstream
        16
    xcstream  
       2020-09-10 00:38:29 +08:00
    放视频的话 好像不能拖动进度条
    sologgfun
        17
    sologgfun  
       2020-09-10 08:17:21 +08:00
    访问量不大肯定可以哎
    cat
        18
    cat  
    OP
       2020-09-10 08:18:28 +08:00 via iPhone
    @shynome 也对,还是自己测一下吧
    SoloCompany
        19
    SoloCompany  
       2020-09-10 08:43:40 +08:00   ❤️ 1
    纯静态资源服务走的是 sendfile, 吃的是 io, 多核性能提升的意义不大, 直接用 node 没啥大问题
    janxin
        20
    janxin  
       2020-09-10 10:01:35 +08:00
    访问量不大跑个什么服务都行的,没这么多需要考虑的
    lijialong1313
        21
    lijialong1313  
       2020-09-10 11:02:18 +08:00
    我认为可能是 node 不好做安全处理,nginx 是专业的 web 服务器的话可能 nginx 在安全方面可能更好……这是我猜测
    Mohanson
        22
    Mohanson  
       2020-09-10 14:59:13 +08:00 via Android
    狗头,连 node 性能更好都出来了…
    jawnkuin
        23
    jawnkuin  
       2020-09-10 15:26:23 +08:00
    OSS+CDN 一分钟搞定,就别自己写了
    cat
        24
    cat  
    OP
       2020-09-10 16:44:38 +08:00
    @jawnkuin 内网项目呢?敏感数据呢?呵呵
    w3cfed
        25
    w3cfed  
       2020-09-10 23:10:16 +08:00
    不知道楼主技术栈是啥。搭建 Nginx 静态资源服务器没啥技术成本丫。性能还是可以的。能少?指的是。30 min 配置好。
    marcong95
        26
    marcong95  
       2020-09-11 21:46:26 +08:00
    直接 caddy file-server ?
    libook
        27
    libook  
       2020-09-14 11:57:50 +08:00
    开头也说了是轻业务、访问量不大,基本原则就是如果没有可预见的问题或明确的需求,顺不顺手就会成为选型的首要因素,哪个顺手直接用就好了,等遇到问题再优化或者换方案。

    如果你提供文件是有业务逻辑控制的,不好直接用 Nginx 简单 host 一个目录的话,那就直接在 Koa 里搞就行了,fs readable stream 直接 pipline 到 res 的 response writable stream 就行了。

    一般如果在提供静态文件访问服务上面不需要额外的业务逻辑参与的话,Linux 上直接包管理器 install nginx,然后去 /etc/nginx/ 下改一下配置文件写上你的静态文件目录的路径,有需要再加上几个 Header,这个已经比装 Node 、装包、写代码要简单一些了;要想更简单的话大多数 Linux 都预装了 python,一行 python3 -m http.server 或者 python2 -m SimpleHTTPServer 就能启动一个静态文件服务器。

    而且提供静态文件访问的性能方面话还要看你的磁盘 IO 、网络速度、能提供的内存缓存大小等。

    要是真的对这个性能情况好奇,可以自己做一下 benchmark,然后把结果发上来。
    love
        28
    love  
       2020-09-14 23:05:45 +08:00
    服务地址在哪?我本地打个压测命令看看能不能撑得住 :)
    nginx 有现成的网络防护,限制流量并发什么的,自己写的没有,如果有恶意用户都不用 DDOS,本机就搞死你了。
    ppgs8903
        29
    ppgs8903  
       2020-09-29 08:57:48 +08:00
    量不大都一样,量大 cdn 。~ ~ 能问出来这种问题的,8899 量不大的。
    xcstream
        30
    xcstream  
       2020-11-10 00:26:58 +08:00
    视频拖拽进度条可以么
    oliver2bao
        31
    oliver2bao  
       2020-11-17 11:08:06 +08:00
    额........这种事还是 nginx 做比较合适吧,虽然 node 也能做,但是手撸一个能和 nginx 功能的都很吃力,性能的话更不用说了吧。
    yodhcn
        32
    yodhcn  
       2020-11-20 12:08:18 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3271 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:56 · PVG 20:56 · LAX 05:56 · JFK 08:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.