Nginx反向代理原理详解(图文全面总结)

关注mikechen十余年BAT架构经验倾囊相授!

大家好,我是mikechen睿哥。


Nginx是大型架构的必备技能,下面我就重点来详解Nginx反向代理原理@mikechen

Nginx反向代理

反向代理是一种代理模式,其中代理服务器充当了客户端和后端服务器之间的中间人。

如下图所示:

反向代理是指客户端请求访问目标服务器时,目标服务器的 IP 地址对客户端是不可见的。

代理服务器充当“中介”,客户端的请求首先到达代理服务器,再由代理服务器决定将请求转发给哪个后端服务器。

通过反向代理,有如下好处:

  • 隐藏后端服务器:客户端不知道后端的实际服务器,只能访问代理服务器;
  • 负载均衡:将请求分发到多个后端服务器,提高服务可用性和性能;
  • 安全性:代理服务器可以充当防火墙,防止外部直接访问后端服务;
  • 缓存:通过缓存静态资源,减轻后端服务器负担,提高响应速度;


Nginx反向代理原理

工作原理,如下图所示:

大致流程,如下:

客户端请求→Nginx反向代理→后端服务器→后端响应→Nginx反向代理→客户端

第一步:客户端请求

客户端向 Nginx 反向代理服务器发送请求;

第二步:Nginx 处理请求

Nginx 根据配置规则,判断如何将请求转发给后端服务器。

Nginx 可以根据 URL、请求类型或其他条件选择最合适的后端服务器。

第三步:Nginx 转发请求

Nginx 将请求转发给一个或多个后端服务器,例如:通过负载均衡算法…,决定后端服务器。

最后,Nginx 返回响应

Nginx 将后端服务器的响应返回给客户端。

在这个过程中,客户端只知道Nginx服务器的IP地址和端口,而不知道后端服务器的存在。

比如:

upstream backend {    server 192.168.1.101;    server 192.168.1.102;} server {    location /{        proxy_pass http://backend;}}

在这个配置中,所有进入 / 路径的请求都会被 Nginx 反向代理到 backend 上的后端服务器。

Nginx 使用 upstream 模块来定义一组后端服务器。

在进行反向代理时,Nginx 会根据配置的负载均衡算法从 upstream 模块中选择一个后端服务器,并与其建立连接。

比如:

  • 轮询(Round Robin):默认算法,顺序轮流将请求转发给后端服务器。
  • 加权轮询(Weighted Round Robin):根据每台服务器的权重分配请求。
  • 最少连接数(Least Connections):将请求转发给当前连接数最少的服务器。
  • 源地址哈希(IP Hash):根据客户端 IP 地址进行哈希计算,确保相同客户端请求始终被转发到同一台后端服务器。

除此之外,Nginx 会维护与后端服务器的连接,并可以利用 Keep-Alive 连接来复用 TCP 连接,减少连接建立和关闭的开销,提高性能。

以上

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

相关文章

Nginx反向代理

Nginx配置反向代理在server块中配置 #监听80端口 listen 80; #监听的ip或域名 server_name...

听说你的资源被盗用了,那你知道 Nginx 怎么防盗链吗?

简单有效的防盗链手段场景如果做过个人站点的同学,可能会遇到别人盗用自己站点资源链接的情况,这就是盗链。说到盗链就要说一个 HTTP 协议的 头部,referer 头部。当其他网站通过 URL 引用了你...

完整版nginx反向代理配置

完整版nginx反向代理配置项目发布了只提供了一个ip和端口使用。要完成前后分离项目的部署,因此需要把后端服务代理到前端访问的域名和端口上去,因此用上了nginx的反向代理。我们找到了nginx的配置...

使用Nginx搭建反向代理

反向代理的好处:可以隐藏真实服务器ip地址,而且一个端口运行多个应用,每个应用端口号不一样。那么如何使用nginx搭建反向代理进入安装好的nginx目录,找到nginx.conf文件并打开编辑找到se...

nginx实战之反向代理

1、反向代理所谓反向代理就是nginx接受到请求后,将请求转发给内部的一台服务器处理,比如我们启动了一个tomcat是8081端口,但是我们防火墙不会开放8081端口,只会开放nginx的80端口,那...