8、nginx反向代理优缺点分析

发布时间 2024-01-10 12:10:22作者: ccblblog

1.概述

  • 反向代理(reverse proxy)方式是指用代理服务器来接受Internet 上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外的表现就是一个 Web 服务器。

  • 充当反向代理服务器是Nginx 的一种常见用法(反向代理服务器必须能够处理大量并发请求),由于Nginx具有“强悍”的高并发高负载能力,因此一般会作为前端的服务器直接向客户端提供静态文件服务。但也有一些复杂、多变的业务不适合放到 Nginx 服务器上,这时会用Apache、Tomcat等服务器来处理。于是,Nginx 通常会被配置为既是静态 Web 服务器也是反向代理服务器,不适合 Nginx 处理的请求就会直接转发到上游服务器中处理。

    nginx反向代理

2.Nginx反向代理流程优缺点

Nginx反向代理整体流程

  • 当客户端发来 HTTP 请求时,Nginx 并不会立刻转发到上游服务器,而是先把用户的请求(包括 HTTP 包体)完整地接收到 Nginx 所在服务器的硬盘或者内存中,然后再向上游服务器发起连接,把缓存的客户端请求转发到上游服务器。
  • Nginx 的这种工作方式有什么优缺点呢?
    • 缺点是延长了一个请求的处理时间并增加了用于缓存请求内容的内存和磁盘空间。
    • 优点则是降低了上游服务器的负载,尽量把压力放在Nginx服务器上。
  • Nginx 的这种工作方式为什么会降低上游服务器的负载呢?
    • 客户端与代理服务器之间的网络环境会比较复杂,多半是"走"公网,网速平均下来可能较慢,因此,一个请求可能要持续很久才能完成。
    • 代理服务器与上游服务器之间一般是"走"内网,或者有专线连接,传输速度较快。一般反向代理服务器在与客户端建立连接且还没有开始接收 HTTP包体时,就已经向上游服务器建立了连接。例如,某个请求要上传一个 1GB 的文件,那么每次Squid 在收到一个TCP 分包(如2KB)时,就会即时地向上游服务器转发。在接收客户端完整 HTTP 包体的漫长过程中,上游服务器始终要维持这个连接,这直接对上游服务器的并发处理能力提出了挑战。
    • Nginx在接收到完整的客户端请求(如1GB 的文后,才会与上游服务器建立连接转发请求,由于是内网,所以这个转发过程会执行得很快。这样,一个客户端请求占用上游服务器的连接时间就会非常短,也就是说,Nginx 的这种反向代理方案主要是为了降低上游服务器的并发压力。