Nginx是大型架构核心,下面我详解Nginx反向代理原理@mikechen
Nginx反向代理
你要搞懂Nginx反向代理,首先,你要搞懂正向代理。
正向代理:就是客户端知道代理服务器的存在。
请求先发给代理,再由代理访问目标互联网资源,典型的场景就是:代理客户端(例如翻墙工具)。

反向代理,就是反过来,客户端不知道后端真实服务器的存在。
以为自己在直接访问 Nginx,Nginx 接收请求后转发给内部的后端服务器集群,并返回结果。
常用于负载均衡、隐藏后端架构、动静分离、安全防护等。
Nginx反向代理原理
当 Nginx 作为反向代理工作时,请求经历以下关键阶段:

建立连接:客户端与 Nginx 建立 TCP 连接(三次握手)。
请求接收:Nginx 接收完整的 HTTP 请求头(Header)。
上游选择:根据配置文件中的 proxy_pass 指令。
通过负载均衡算法(如轮询、Hash)选择一台后端服务器(Upstream)。
内容转发:Nginx 建立与后端服务器的连接,将请求发送出去,并将响应流式地传回给客户端。
Nginx反向代理配置
常见配置通常包含 upstream 和 proxy_pass,前者定义后端集群,后者定义转发目标 。
常配的转发头包括 Host、X-Real-IP、X-Forwarded-For 和 X-Forwarded-Proto,用于把真实客户端信息传给后端 。
如果后端有多台机器,还可以结合轮询、加权轮询、最少连接、IP Hash 等策略做流量分配 。
典型配置如下:
upstream backend {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}