请教 Node.js 搭配 Nginx 的问题

2017-03-09 23:17:15 +08:00
 witcat

最近在练习 node.js ,想做一个新闻网站的例子
node.js 只返回 json 数据
nginx 托管静态的 html 通过加载 json 显示内容

现在有点不理解反向代理的作用,看了一些文章觉得主要是省去了 node.js 写静态文件路由的麻烦
但是如果我让 nginx 运行在 80 端口, node.js 运行在 3000 端口
静态 html 直接加载 3000 端口的数据不是也可以吗?

我的理解有什么错误?类似这样的应用有没有更好的配置方法? 谢谢

2694 次点击
所在节点    Node.js
7 条回复
ryd994
2017-03-09 23:54:37 +08:00
Nginx 反代可以当肉盾用
利用 Nginx 的限制频率和粗略筛查非法请求
而 Nginx 本身只要不是 DDoS ,是打不死的

其次用统一的入口比随便找个高位端口要好得多,特别是考虑某些单位只允许 80 和 443

还有你考虑 https 了么?考虑 gzip 了么?这些扔给 Nginx 做会快得多

再有 HTTP1.1 pipeline
tomato3
2017-03-10 00:52:54 +08:00
你是个生产数据的面包厂,运行在 3000 , nginx 就是个大街上的一家面包店在 80 ,它可以结账( https 处理等等)打包一些东西( gzip )拒绝一些顾客的骚扰等等,或者简单的指路,它是个代理点,可以让某种面包的订单直接找你沟通,或者让订单从它那里中转一下,甚至还可以在你这家工厂倒闭了以后去其他工厂拿货。如果 nginx 是个军火贩子,那么你不能知道工厂的一些秘密,只能找这个军火贩子拿数据,到底数据具体来源在哪里,无从而知,隐藏后端服务群,避免暴露危险。从另外一方面来说,这个 nginx 也代理了你的请求,后面的工厂不需要从每一个客户那里拿东西,然后交易,工厂只需要从 nginx 那里拿就可以了。你想想,要是一个客户慢吞吞的,你作为一个想要做更多生意的工厂,是不是希望快速结束这笔交易?怎么办?让代理去和你的客户沟通。
witcat
2017-03-10 00:58:47 +08:00
@tomato3 谢谢,我已经懂了 1 楼的也很全面
ywgx
2017-03-10 09:08:45 +08:00
@tomato3 web 服务器把自己做不了的动态数据请求外包给其他做,简单一句话的时候解释的这么麻烦
tomato3
2017-03-10 11:28:18 +08:00
@ywgx 在自己方面觉得比较简单,但是站在对方的角度就不一样了。在对方的理解角度解释更有利于表达。
jeremychaochao
2017-03-10 11:40:03 +08:00
@ryd994 我也有遇到这个问题, node 可以起在 80 , https 和 gzip 压缩也不是问题,框架里都有集成,我觉得是 nginx 在处理反代,安全,静态文件加载方面上更专业,功能也更强大,术业有专攻罢了
libook
2017-04-07 00:05:11 +08:00
有一个概念叫“前后端分离”,就是前端和后端是两个项目,前端开发构建完是一个文件夹,后端运行起来是监听一个端口的服务,用 nginx 可以配置不同的 location 代理到不同端,比如网站根目录“/”就默认代理到前端的文件夹,“/api/”开头的路径就代理到后端的端口上。
好处有很多;比如 nginx 处理静态文件的效率很高;可以额外加很多头信息,实现如客户端缓存等机制;也可以在一台服务器上跑 nginx ,然后背后有一堆服务器跑服务端, nginx 上面自带负载均衡功能;前端项目文件也可以随时脱离 nginx 放到分布式的 CDN 上面,提升网络覆盖率和传输速率。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/346286

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX