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

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

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

10318 次点击
所在节点    程序员
39 条回复
wangxiaoaer
2019-12-03 08:53:20 +08:00
真是够了。麻烦搞清楚所谓的前后端分离的概念和场景.

回答你的问题,是否需要 nginx 是由你们开发完成后打包的策略决定的:


1 前后端各自分开打包

产生了 2 个包,意味着同时运行了 2 个应用:一个前端纯静态,一个后端动态(比如 java 的 war )。那么问题来了,你那个纯静态的包怎么运行?这时候普遍用 nginx 或者其他 web server 了。这种情况 nginx 充当的是静态资源服务器的角色。

此外,大多情况下我们还需要前后端用同样的域名和端口,这时候普遍用 ngnix 或其他,这个时候 nginx 充当的是反向代理服务器的角色。

2 前后端合并成一个包

打包的时候将前端资源合并到后端的包内(比如后端的 war 包内),这样就不需要 nginx。


至于楼上有些人说的 SSL 等,跟这个前后端分离没有半毛钱关系。
lihongjie0209
2019-12-03 09:04:14 +08:00
你愿意在你的前端代码中写死 https://domain:8080/api 吗?因为一般的应用服务器都不会用 80 端口
cz5424
2019-12-03 09:06:09 +08:00
出租房不好吗,为什么买别墅🏡
ZSeptember
2019-12-03 09:09:16 +08:00
可以的。
如果只是一个单机服务,直连业务服务没问题的。
至于上面说的性能问题,肯定是理解错了,多了一层代理,肯定会降低性能的。
mytsing520
2019-12-03 09:14:49 +08:00
能用现有方案解决的问题为什么要重复造轮子呢?无端增加成本?
我不敢说现有方案能完美解决你的问题,但使用 Nginx/IIS/Squid/Varnish 这是很多人包括某些大厂在内采纳的技术方案。
至于楼主说的“前后端分离”,能让后端程序专心处理后端请求,提高系统承载能力我认为是个好事。

以上
qwerthhusn
2019-12-03 09:18:44 +08:00
我们用 Nginx 的主要作用就是 SSL 消除。
还有就是 80 和 443,一台机器一个端口只能被一个进程占用。如果有多个服务,可以根据 nginx 的 server_name 分发
yxcoder
2019-12-03 09:22:59 +08:00
本人前端,对此的理解是,当访问量过大时,直接访问服务器接口,只能访问某一个的服务器,不能调配,通过 nginx 就可以实现根据多个服务器的不同状态选择对应的服务器进行处理
yalin
2019-12-03 09:27:33 +08:00
为什么要前后端分离类?
exploreXin
2019-12-03 09:30:51 +08:00
楼主的经历,身份,年龄我不敢肯定,但我敢肯定的是楼主一定不是后端程序员,前后端分离也可以不用 Nginx,可以用其他 Web 服务器,也可以不用 Web 服务器,但一定要自己实现一个拥有 web 传输与解读能力的组件,例如 Node 自建 web 服务器,其他自建服务器的技术还有很多,比如 Swoole , Workman 等等,有时间可以了解一下。
gamexg
2019-12-03 09:51:56 +08:00
可以不用 nginx 啊,
一个小服务,编写时也是前后分离,
编译后发布时,连前端 html 代码都合并到可执行文件里面了,
单文件部署,不依赖任何 nginx 等内容。

但是生产环境,面向客户等情况,你前端不使用 nginx 等做前端,那么单个 80 口只能开给一个网站了。
子域名等也都别用了。
当然也可以自己些子域名支持等,但是有现成的为什么要自己写?
zw1one
2019-12-03 09:55:54 +08:00
我一般用 nginx 解决前后端的跨域问题。
jsy123392550
2019-12-03 10:02:12 +08:00
我感觉楼主问的是后端为什么要用 nginx 再转一次吧,不是说前端为什么要用 nginx,楼上很多人估计理解错意思了。如果是单机的话,确实没有必要再用 nginx 再转一次
NoKey
2019-12-03 10:04:08 +08:00
不反向代理,怎么解决跨域问题?服务端写代码解决?
xuanbg
2019-12-03 10:04:10 +08:00
像我们用 Node 做前端服务的,就不需要 nginx 了。总之,你的页面需要有个 web 服务才能通过浏览器访问,而这个必须的 web 服务,可以由 nginx、iis、Node 或者你自己开发一个来提供。不一定要 nginx,但必须要有。
sarices
2019-12-03 10:21:43 +08:00
从来没说一定要 nginx 啊,你可以其他啊,你不用就不行了,你的前端怎么跑呢?打包发个邮件给人下载打开看吗?
wleexi
2019-12-03 10:29:47 +08:00
@minglanyu 在学做的过程中发现这个问题了,所以来问,感谢。
leafre
2019-12-03 11:23:34 +08:00
用于解决跨域以及集群的负载均衡,nginx
是现成的高性能轮子,为何不用
demonzoo
2019-12-03 13:50:50 +08:00
看来你没遇到过跨域问题,这是一个最基本的需求了,尤其是在当今各种微内核架构之下。其它什么负载均衡 ssh 都要往后稍稍
TypeErrorNone
2019-12-03 14:44:34 +08:00
最基本的,当后端服务有上百台机器时,你前端怎么访问接口?

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

https://tanronggui.xyz/t/625314

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

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

© 2021 V2EX