为什么前后端分离要使用 nginx,前端工程直接访问接口不行吗

2019-12-03 00:44:30 +08:00
 wleexi

最近看了几个前后端分离的工程,都使用到了 nginx。没有 nginx 直接访问服务端不行吗

10191 次点击
所在节点    程序员
39 条回复
rogwan
2019-12-03 00:51:47 +08:00
其实是可以的,只是 nginx 能做的更好,更专业、高性能。静态文件,反向代理,负载均衡等等都是 nginx 的长项
renmu
2019-12-03 00:54:06 +08:00
可以,但是性能不行
wangyzj
2019-12-03 00:58:00 +08:00
性能不行
ecloud
2019-12-03 01:08:21 +08:00
我们用 haproxy
因为难道你要在后端自己实现一个 SSL ?还是您老自行发明一种密码来加密数据?不然你前端 call 后端难道走明文?

PS:某著名的交易软件在 TCP 上自己实现了一套加密 /编码方式,然后竟然大言不惭的管这东西叫做"web api",WCNMLGBD
lalalakakaka
2019-12-03 01:08:49 +08:00
几乎任何项目都需要静态文件服务器,这时候需要 nginx。
既然已经用 nginx 了,那么为什么不多利用 nginx 搞搞负载均衡,路由,SSL 呢
minglanyu
2019-12-03 01:15:27 +08:00
前端调用的多个子系统接口的话,foo.com:8080/users,bar.com:9090/users
用 nginx 反向代理以后,foo.com/users,bar.com/users

不懂就去学一学,动手做一做嘛
chendy
2019-12-03 01:20:17 +08:00
直接访问服务端是访问到哪里呢?
静态文件塞进后端项目的话,前后端就被迫要一起更新,失去了很多灵活性
当然不用 nginx 用别的也行,有条件 oss+cdn 最好了
Trim21
2019-12-03 01:22:54 +08:00
你要是用云服务商的那堆东西,比如对象存储 cdn 和负载均衡,也可以考虑不用 nginx 了
不过也只是类似于云服务商帮你做了 nginx 能做的事情而已
ecloud
2019-12-03 01:22:57 +08:00
@lalalakakaka 静态真不是理由,把静态资源放 FS 里再用 nginx 发出去,并不真的是个好主意。因为后端出现静资源本来就是比较奇怪的设计,如果肯定有静态的话,不是都应该在前端里吗?即使有静态,也不应该脱离后端代码和数据库而单独以文件的形式存在于 FS 中。即便是一定要个静态池子,一定不能放成 BLOB,哪怕是弄个 Zope 放里面也比裸在 FS 里好
ericls
2019-12-03 03:14:07 +08:00
这跟前后端分离有什么关系?
Heebe
2019-12-03 03:29:34 +08:00
楼主问啥都没弄明白就可以可以……
不是必须用 nginx,而是必须要用符合 http1 2 X 协议。nginx 或者 iis 等被用到的根本原因是他们符合协议,浏览器请求和服务器应答都是要在协议要求内,比如包含了头部信息、请求格式、保持连接、缓存等等。
你连接到 ip 和端口,这本身依然是 tcp、udp 的方式,但是如果你建立一个服务端而没有符合 http 协议,那浏览器请求就会没有应答、状态码这些,那自然是得不到预期的结果,比如你想访问一个文件,浏览器发起请求,那么服务器就要告诉浏览器这个文件的状态和内容等。
假如你的端口服务过程,要去完成一个 http 协议,那是很复杂的事情,所以,大家会选择流行的网站服务端产品,包括大企业他们也大多数用的都是第三方的开源的,以 nginx 及其衍生产品为主,Apache 和 iis 则相对少一些商用。
至于说其他什么负载、代理等等,都是基于协议的扩展内容,不是基础但是又尤其重要,因为这关系到成本问题。如果开发和作为学习成本大,如果企业硬件成本高……定然选择成本最低性能符合预期的方案。
akira
2019-12-03 03:55:34 +08:00
举个栗子,需要跑多份后端来提高负载能力,
或者不同的 uri 是不同的程序实例
这个时候就需要一个前置入口了
wellsc
2019-12-03 04:21:51 +08:00
@ecloud 您这暴脾气,让我以为来到了百度帖吧
holulu
2019-12-03 08:19:08 +08:00
没有能不能,只有需不需要。
areless
2019-12-03 08:19:37 +08:00
单机总体上 nginx 性能会好一点。但单出口普通网络构架下反向代理 n 台内网服务器做分布式是没必要的,普通业务( cpu~内存没吃饱,却大量占用出口带宽类型)在出口 100m 的情况下,建立一个 100m 内网的分布式系统相当于一台电脑上插了一堆 usb1.0 的设备一样傻~~~所以有思科堆叠,mac mini 堆叠。cdn 是可行的,cdn 是多点出口缓存,不是单路出口反向代理。
lululau
2019-12-03 08:21:42 +08:00
前后端分离的情况下,不用 nginx 的话,前段资源用什么 serve,前后端域名端口不一样怎么解决?把前后端代码打包到一起? nginx 简单配置看一下,半个小时,不费劲的
fengpan567
2019-12-03 08:22:48 +08:00
你的接口不做集群的?就算是单个服务,为了安全也不会把真是的接口 IP 地址暴露出来
yangxin0
2019-12-03 08:24:45 +08:00
最简单一个例子如果你的服务要支持 HTTPS 咋弄? 如果你的服务要支持 HTTP2 咋弄? HTTP 协议极其复杂庞大一般后端 App 的 HTTP 服务器都比较简单且容易出问题。
passerbytiny
2019-12-03 08:50:29 +08:00
楼主不要钻牛角尖,不是因为前后端分离才用 nginx,而是绝大多数情况下都要用 nginx 或 IIS。
jorneyr
2019-12-03 08:51:45 +08:00
集群、负载均衡、HTTPS、性能更好的静态文件等使用 Nginx 比较方便。

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

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

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

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

© 2021 V2EX