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 连接,减少连接建立和关闭的开销,提高性能。