1-nginx相关概念
Nginx简介
Nginx是一个高性能的HTTP和反向代理web服务器,也是一个IMAP、POP3、SMTP服务器,特点是占用内存少,并发性能强。
Nginx作为web服务器
Nginx可以作为静态页面的web服务器,异步非阻塞,使用IO多路复用的epoll模型。
同步、异步、阻塞、非阻塞
同步与异步是通信模式的概念
同步:发送方发送请求后,等待请求响应,才继续发送下一个请求
异步:发送方发送请求后,不需要等待响应,就继续发送下一个请求
阻塞与非阻塞是进程处理调用的方式
阻塞:结果返回之前线程处于挂起状态
非阻塞:线程不会被挂起,立即执行返回下一个调用
正向代理(代理的是客户端)
客户端想要访问一个服务器,但是它可能无法直接访问这台服务器,这时候这可找一台可以访问目标服务器的另外一台服务器,而这台服务器就被当做是代理人的角色 ,称之为代理服务器,于是客户端把请求发给代理服务器,由代理服务器获得目标服务器的数据并返回给客户端。客户端是清楚目标服务器的地址的,而目标服务器是不清楚来自客户端,它只知道来自哪个代理服务器,所以正向代理可以屏蔽或隐藏客户端的信息。
适用场景
访问被禁止的资源:让客户端访问原来不能访问的服务器,通过代理服务器进行访问。
隐藏客户端的地址:代理服务器代表了客户端,看不到原始的客户端。
进行客户访问控制:集中部署访问策略,控制客户端的访问行为,内部资源的控制。
加速访问资源:代理服务器设置一个较大的缓冲区,会将部分请求的响应保存到缓冲区,其他用户访问时可以从缓冲区域直接读取信息。
工作流程
- 客户端配置代理服务器:客户端配置代理服务器的地址和端口。
- 客户端发送请求:客户端将请求发送到代理服务器。
- 代理服务器转发请求:代理服务器根据请求中的目标地址,将请求转发到目标服务器。
- 目标服务器响应:目标服务器处理请求并返回响应。
- 代理服务器返回响应:代理服务器将目标服务器的响应返回给客户端
反向代理(代理的是服务器)
反向代理就是代理服务器为服务器作代理人,站在服务器这边,它就是对外屏蔽了服务器的信息,常用的场景就是多台服务器分布式部署,像一些大的网站,由于访问人数很多,就需要多台服务器来解决人数多的问题,这时这些服务器就由一个反向代理服务器来代理,客户端发来请求,先由反向代理服务器,然后按一定的规则分发到明确的服务器,而客户端不知道是哪台服务器。
适用场景
隐藏服务器的IP:因为反向代理服务器代理了服务器所以客户端并不知道业务服务器的IP。
负载均衡:反向代理服务器根据业务服务器的负载情况,将客户端的请求分别发送到不同的业务服务器。
提高访问速度:对于静态内容及短时间内有大量访问请求的动态内容提供缓存服务。
提供安全保障:对网站提供基于WEB攻击的防护、为后端提供加密和SSL加速、提供HTTP访问认证。
工作流程
- 客户端发送请求:客户端将请求发送到代理服务器。
- 代理服务器转发请求:代理服务器根据配置将请求转发到后端服务器。
- 后端服务器响应:后端服务器处理请求并返回响应。
- 代理服务器返回响应:代理服务器将后端服务器的响应返回给客户端。
负载均衡
单个服务器解决不了时,增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
常见负载均衡算法
- 轮询(Round Robin):依次将请求分发到各个服务器。
- 加权轮询(Weighted Round Robin):根据服务器的权重分配请求,权重高的服务器会分配到更多的请求。
- 最少连接数(Least Connections):将请求分配给当前连接数最少的服务器。
- IP哈希(IP Hash):根据客户端的IP地址进行哈希运算,将请求分配到固定的服务器,实现会话保持。
- 一致性哈希(Consistent Hashing):通过一致性哈希算法将请求分配到服务器,减少因服务器增减而导致的缓存失效。
动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
适用场景
- 客户端发送请求:客户端发送请求到 Nginx 服务器。
- Nginx 分发请求:Nginx 根据请求的 URL 路径,将静态内容请求分发到静态服务器,将动态内容请求分发到动态服务器。
- 服务器响应:静态服务器和动态服务器分别处理请求并返回响应。
- Nginx 返回响应:Nginx 将服务器的响应返回给客户端。