nginx必知必会

2022-09-19 10:52:20 浏览数 (1)

# Apahce和nginx的区别

nginx相对于apache来说是轻量级,同样是web服务,比apache占用内存及资源更少,抗并发方面也是,nginx处理请求是异步非阻塞的,而apache则是阻塞型的,在高并发下nginx能保持高性能,但是nginx有一些不足,他在健康检查方面只能通过端口来检测,不支持url来检测,并且支持的协议比较少,

# nginx作为负载均衡

nginx的负载均衡模块有:upstream模块和proxy模块

nginx负载均衡的策略:轮询,权重,iphash ,还有urlhash

# nginx服务器上master和worker的区别

Worker进程是负责处理请求的进程

master进程负责管理worker进程的同时也负责读取配置文件和判断配置文件语法

在nginx中,master进程只能有一个,而worker进程可以有多个

# 三握四挥,以打电话举例

三次握手:

第一次握手:小明说:“喂喂喂,能听到我说话吗?”

第二次握手:小萌说:“我可以听到你说话,你能听到我说话吗?”(我回了你一句,说明了我可以听到你说话(说明了我具有接受消息的能力))

第三次握手:小明说:“我听到你说话了”(双方都可以听到对方了声音,表示没有问题,样就可以进行通话了(建立了 TCP 连接))

四次挥手:

第一次挥手:小明:“我说完了,我要睡了”(主动关闭方发送一个信息,告诉告诉被动关闭方:我已经不会再给你发数据了)

第二次挥手:小萌:“好的,知道了”(被动关闭方收到信息,发送一个类似收到的信息给对方)

第三次挥手:小萌:“恩,我也说完了”(被动关闭方发送一个信息,告诉主动关闭方,我的数据也发送完了,不会再给你发数据了)

第四次挥手:小明:“恩”(主动关闭方收到信息后,发送一个类似收到的信息,完成四次挥手)

# 为什么是三次握手?不是两次或者四次?

  • 假如是两次握手,会发生什么情况呢? 服务端在发出应答消息后,它根本就不能确认客户端是否接受到消息了,那么这样意味着只有客户端可以向服务端发送数据。
  • 假如是四次握手呢?明明已经保证了一个稳定的传输流了,为什么还要浪费性能再去发一次消息,浪费了性能。

# 正向代理和反向代理

代理分为正向代理和反向代理

  • 正向代理:客户端 <一> 代理 一>服务端

正向代理简单地打个租房的比方:

代码语言:javascript复制
graph LR
A(A客户端)-->B(B代理)
B(B代理)-->C(C服务端)

代码语言:javascript复制
A(客户端)想租C(服务端)的房子,但是A(客户端)并不认识C(服务端)租不到。
B(代理)认识C(服务端)能租这个房子,所以你找了B(代理)帮忙租到了这个房子。

这个过程中C(服务端)不认识A(客户端)只认识B(代理)
C(服务端)并不知道A(客户端)租了房子,只知道房子租给了B(代理)。

  • 反向代理:客户端 一>代理 <一> 服务端

反向代理也用一个租房的例子:

A(客户端)想租一个房子,B(代理)就把这个房子租给了他。 这时候实际上C(服务端)才是房东。 B(代理)是二房东把这个房子租给了A(客户端)。 这个过程中A(客户端)并不知道这个房子到底谁才是真正的房东 他都有可能认为这个房子就是B(代理)的 也就是说:反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送的反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实的服务器IP地址。

由上的例子和图我们可以知道正向代理和反向代理的区别在于代理的对象不一样,正向代理的代理对象是客户端,反向代理的代理对象是服务端。正向代理隐藏真实客户端,反向代理隐藏真实服务端

0 人点赞