最近看了几个前后端分离的工程,都使用到了 nginx。没有 nginx 直接访问服务端不行吗
1
rogwan 2019-12-03 00:51:47 +08:00 via iPhone 2
其实是可以的,只是 nginx 能做的更好,更专业、高性能。静态文件,反向代理,负载均衡等等都是 nginx 的长项
|
2
renmu 2019-12-03 00:54:06 +08:00 via Android 1
可以,但是性能不行
|
3
wangyzj 2019-12-03 00:58:00 +08:00
性能不行
|
4
ecloud 2019-12-03 01:08:21 +08:00
我们用 haproxy
因为难道你要在后端自己实现一个 SSL ?还是您老自行发明一种密码来加密数据?不然你前端 call 后端难道走明文? PS:某著名的交易软件在 TCP 上自己实现了一套加密 /编码方式,然后竟然大言不惭的管这东西叫做"web api",WCNMLGBD |
5
lalalakakaka 2019-12-03 01:08:49 +08:00 1
几乎任何项目都需要静态文件服务器,这时候需要 nginx。
既然已经用 nginx 了,那么为什么不多利用 nginx 搞搞负载均衡,路由,SSL 呢 |
6
minglanyu 2019-12-03 01:15:27 +08:00 via iPhone 2
前端调用的多个子系统接口的话,foo.com:8080/users,bar.com:9090/users
用 nginx 反向代理以后,foo.com/users,bar.com/users 不懂就去学一学,动手做一做嘛 |
7
chendy 2019-12-03 01:20:17 +08:00 1
直接访问服务端是访问到哪里呢?
静态文件塞进后端项目的话,前后端就被迫要一起更新,失去了很多灵活性 当然不用 nginx 用别的也行,有条件 oss+cdn 最好了 |
8
Trim21 2019-12-03 01:22:54 +08:00 via Android 1
你要是用云服务商的那堆东西,比如对象存储 cdn 和负载均衡,也可以考虑不用 nginx 了
不过也只是类似于云服务商帮你做了 nginx 能做的事情而已 |
9
ecloud 2019-12-03 01:22:57 +08:00
@lalalakakaka 静态真不是理由,把静态资源放 FS 里再用 nginx 发出去,并不真的是个好主意。因为后端出现静资源本来就是比较奇怪的设计,如果肯定有静态的话,不是都应该在前端里吗?即使有静态,也不应该脱离后端代码和数据库而单独以文件的形式存在于 FS 中。即便是一定要个静态池子,一定不能放成 BLOB,哪怕是弄个 Zope 放里面也比裸在 FS 里好
|
10
ericls 2019-12-03 03:14:07 +08:00 via iPhone
这跟前后端分离有什么关系?
|
11
Heebe 2019-12-03 03:29:34 +08:00 via iPhone 2
楼主问啥都没弄明白就可以可以……
不是必须用 nginx,而是必须要用符合 http1 2 X 协议。nginx 或者 iis 等被用到的根本原因是他们符合协议,浏览器请求和服务器应答都是要在协议要求内,比如包含了头部信息、请求格式、保持连接、缓存等等。 你连接到 ip 和端口,这本身依然是 tcp、udp 的方式,但是如果你建立一个服务端而没有符合 http 协议,那浏览器请求就会没有应答、状态码这些,那自然是得不到预期的结果,比如你想访问一个文件,浏览器发起请求,那么服务器就要告诉浏览器这个文件的状态和内容等。 假如你的端口服务过程,要去完成一个 http 协议,那是很复杂的事情,所以,大家会选择流行的网站服务端产品,包括大企业他们也大多数用的都是第三方的开源的,以 nginx 及其衍生产品为主,Apache 和 iis 则相对少一些商用。 至于说其他什么负载、代理等等,都是基于协议的扩展内容,不是基础但是又尤其重要,因为这关系到成本问题。如果开发和作为学习成本大,如果企业硬件成本高……定然选择成本最低性能符合预期的方案。 |
12
akira 2019-12-03 03:55:34 +08:00
举个栗子,需要跑多份后端来提高负载能力,
或者不同的 uri 是不同的程序实例 这个时候就需要一个前置入口了 |
14
holulu 2019-12-03 08:19:08 +08:00 via iPad 1
没有能不能,只有需不需要。
|
15
areless 2019-12-03 08:19:37 +08:00 via Android 1
单机总体上 nginx 性能会好一点。但单出口普通网络构架下反向代理 n 台内网服务器做分布式是没必要的,普通业务( cpu~内存没吃饱,却大量占用出口带宽类型)在出口 100m 的情况下,建立一个 100m 内网的分布式系统相当于一台电脑上插了一堆 usb1.0 的设备一样傻~~~所以有思科堆叠,mac mini 堆叠。cdn 是可行的,cdn 是多点出口缓存,不是单路出口反向代理。
|
16
lululau 2019-12-03 08:21:42 +08:00 via iPhone 1
前后端分离的情况下,不用 nginx 的话,前段资源用什么 serve,前后端域名端口不一样怎么解决?把前后端代码打包到一起? nginx 简单配置看一下,半个小时,不费劲的
|
17
fengpan567 2019-12-03 08:22:48 +08:00
你的接口不做集群的?就算是单个服务,为了安全也不会把真是的接口 IP 地址暴露出来
|
18
yangxin0 2019-12-03 08:24:45 +08:00
最简单一个例子如果你的服务要支持 HTTPS 咋弄? 如果你的服务要支持 HTTP2 咋弄? HTTP 协议极其复杂庞大一般后端 App 的 HTTP 服务器都比较简单且容易出问题。
|
19
passerbytiny 2019-12-03 08:50:29 +08:00
楼主不要钻牛角尖,不是因为前后端分离才用 nginx,而是绝大多数情况下都要用 nginx 或 IIS。
|
20
jorneyr 2019-12-03 08:51:45 +08:00
集群、负载均衡、HTTPS、性能更好的静态文件等使用 Nginx 比较方便。
|
21
wangxiaoaer 2019-12-03 08:53:20 +08:00 1
真是够了。麻烦搞清楚所谓的前后端分离的概念和场景.
回答你的问题,是否需要 nginx 是由你们开发完成后打包的策略决定的: 1 前后端各自分开打包 产生了 2 个包,意味着同时运行了 2 个应用:一个前端纯静态,一个后端动态(比如 java 的 war )。那么问题来了,你那个纯静态的包怎么运行?这时候普遍用 nginx 或者其他 web server 了。这种情况 nginx 充当的是静态资源服务器的角色。 此外,大多情况下我们还需要前后端用同样的域名和端口,这时候普遍用 ngnix 或其他,这个时候 nginx 充当的是反向代理服务器的角色。 2 前后端合并成一个包 打包的时候将前端资源合并到后端的包内(比如后端的 war 包内),这样就不需要 nginx。 至于楼上有些人说的 SSL 等,跟这个前后端分离没有半毛钱关系。 |
22
lihongjie0209 2019-12-03 09:04:14 +08:00 1
你愿意在你的前端代码中写死 https://domain:8080/api 吗?因为一般的应用服务器都不会用 80 端口
|
23
cz5424 2019-12-03 09:06:09 +08:00 via iPhone
出租房不好吗,为什么买别墅🏡
|
24
ZSeptember 2019-12-03 09:09:16 +08:00 1
可以的。
如果只是一个单机服务,直连业务服务没问题的。 至于上面说的性能问题,肯定是理解错了,多了一层代理,肯定会降低性能的。 |
25
mytsing520 2019-12-03 09:14:49 +08:00
能用现有方案解决的问题为什么要重复造轮子呢?无端增加成本?
我不敢说现有方案能完美解决你的问题,但使用 Nginx/IIS/Squid/Varnish 这是很多人包括某些大厂在内采纳的技术方案。 至于楼主说的“前后端分离”,能让后端程序专心处理后端请求,提高系统承载能力我认为是个好事。 以上 |
26
qwerthhusn 2019-12-03 09:18:44 +08:00
我们用 Nginx 的主要作用就是 SSL 消除。
还有就是 80 和 443,一台机器一个端口只能被一个进程占用。如果有多个服务,可以根据 nginx 的 server_name 分发 |
27
yxcoder 2019-12-03 09:22:59 +08:00
本人前端,对此的理解是,当访问量过大时,直接访问服务器接口,只能访问某一个的服务器,不能调配,通过 nginx 就可以实现根据多个服务器的不同状态选择对应的服务器进行处理
|
28
yalin 2019-12-03 09:27:33 +08:00
为什么要前后端分离类?
|
29
exploreXin 2019-12-03 09:30:51 +08:00 2
楼主的经历,身份,年龄我不敢肯定,但我敢肯定的是楼主一定不是后端程序员,前后端分离也可以不用 Nginx,可以用其他 Web 服务器,也可以不用 Web 服务器,但一定要自己实现一个拥有 web 传输与解读能力的组件,例如 Node 自建 web 服务器,其他自建服务器的技术还有很多,比如 Swoole , Workman 等等,有时间可以了解一下。
|
30
gamexg 2019-12-03 09:51:56 +08:00 1
可以不用 nginx 啊,
一个小服务,编写时也是前后分离, 编译后发布时,连前端 html 代码都合并到可执行文件里面了, 单文件部署,不依赖任何 nginx 等内容。 但是生产环境,面向客户等情况,你前端不使用 nginx 等做前端,那么单个 80 口只能开给一个网站了。 子域名等也都别用了。 当然也可以自己些子域名支持等,但是有现成的为什么要自己写? |
31
zw1one 2019-12-03 09:55:54 +08:00 3
我一般用 nginx 解决前后端的跨域问题。
|
32
jsy123392550 2019-12-03 10:02:12 +08:00
我感觉楼主问的是后端为什么要用 nginx 再转一次吧,不是说前端为什么要用 nginx,楼上很多人估计理解错意思了。如果是单机的话,确实没有必要再用 nginx 再转一次
|
33
NoKey 2019-12-03 10:04:08 +08:00
不反向代理,怎么解决跨域问题?服务端写代码解决?
|
34
xuanbg 2019-12-03 10:04:10 +08:00 1
像我们用 Node 做前端服务的,就不需要 nginx 了。总之,你的页面需要有个 web 服务才能通过浏览器访问,而这个必须的 web 服务,可以由 nginx、iis、Node 或者你自己开发一个来提供。不一定要 nginx,但必须要有。
|
35
sarices 2019-12-03 10:21:43 +08:00 1
从来没说一定要 nginx 啊,你可以其他啊,你不用就不行了,你的前端怎么跑呢?打包发个邮件给人下载打开看吗?
|
37
leafre 2019-12-03 11:23:34 +08:00 via iPhone
用于解决跨域以及集群的负载均衡,nginx
是现成的高性能轮子,为何不用 |
38
demonzoo 2019-12-03 13:50:50 +08:00 1
看来你没遇到过跨域问题,这是一个最基本的需求了,尤其是在当今各种微内核架构之下。其它什么负载均衡 ssh 都要往后稍稍
|
39
TypeErrorNone 2019-12-03 14:44:34 +08:00 1
最基本的,当后端服务有上百台机器时,你前端怎么访问接口?
|