Nginx反向代理与负载均衡入门¶
为什么需要反向代理和负载均衡?¶
想象你开了一家小餐厅,刚开始只有一个厨师,客人多了就会排队。这时候,你可能需要雇更多厨师(增加服务器),但客人直接找厨师会很混乱,所以你需要一个前台(反向代理服务器)来接待客人,再把客人的订单(请求)分配给不同的厨师(后端服务器)。这就是反向代理和负载均衡的核心作用:隐藏后端服务器,同时让多台服务器分担请求压力。
一、反向代理是什么?¶
反向代理(Reverse Proxy)就像一个“前台接待员”,它接收用户的请求,然后将请求转发给后端的服务器处理,最后把处理结果返回给用户。用户只需要和“前台”打交道,不需要知道后端有多少厨师(服务器)。
举个例子:
用户访问 https://example.com,实际上是Nginx(前台)接收到请求,然后转发给后端的Web服务器(比如192.168.1.101),用户最终看到的页面是后端服务器返回的,但用户不知道后端具体是谁。
二、负载均衡是什么?¶
当用户越来越多,单个后端服务器可能扛不住压力(比如CPU、内存满了),这时候就需要“多厨师(多服务器)”一起工作。负载均衡就是让“前台”(Nginx)把用户的请求平均分配给不同的后端服务器,避免某一台服务器过载。
Nginx如何实现负载均衡?
Nginx通过 upstream 模块定义后端服务器组,然后将用户请求“转发”到这个服务器组中。默认情况下,Nginx会按“轮询”方式(轮流分配)把请求发给后端服务器。
三、手把手配置Nginx反向代理+负载均衡¶
假设你已经安装了Nginx(如果没安装,Ubuntu/Debian可以用 sudo apt install nginx,CentOS用 sudo yum install nginx)。现在我们来配置一个简单的负载均衡环境。
步骤1:定义后端服务器组¶
假设你的后端有两台Web服务器,IP分别是 192.168.1.101 和 192.168.1.102(你需要确保这两台服务器已启动并能正常访问)。
打开Nginx配置文件(通常在 /etc/nginx/conf.d/default.conf 或 /etc/nginx/nginx.conf),添加以下内容:
# 定义后端服务器组,名称为 backend_servers
upstream backend_servers {
server 192.168.1.101; # 后端服务器1
server 192.168.1.102; # 后端服务器2
}
步骤2:配置反向代理规则¶
在同一个配置文件中,添加Nginx的反向代理规则,让用户请求通过Nginx转发到刚才定义的后端服务器组:
server {
listen 80; # Nginx监听的端口(用户访问的端口)
server_name example.com; # 你的域名或服务器IP
location / { # 匹配所有请求
proxy_pass http://backend_servers; # 转发到后端服务器组
proxy_set_header Host $host; # 传递请求头信息(后端服务器能获取用户真实域名)
proxy_set_header X-Real-IP $remote_addr; # 传递用户真实IP(后端服务器能看到用户真实IP)
}
}
步骤3:测试配置¶
-
检查配置语法:
执行sudo nginx -t,确保没有语法错误。如果输出syntax is ok和test is successful,说明配置没问题。 -
重启Nginx:
执行sudo systemctl restart nginx使配置生效。 -
测试负载均衡:
用浏览器访问Nginx服务器的IP(比如http://192.168.1.100,假设Nginx装在这台服务器上),你会发现请求会被轮流分配给192.168.1.101和192.168.1.102处理。
四、进阶:调整负载均衡策略¶
Nginx默认使用“轮询”策略(每个请求轮流分配),但你可以根据需求调整分配规则:
1. 加权轮询(按权重分配请求)¶
如果后端服务器性能不同(比如一台服务器更强),可以给它分配更多请求:
upstream backend_servers {
server 192.168.1.101 weight=5; # 权重5(50%概率)
server 192.168.1.102 weight=3; # 权重3(30%概率)
}
2. IP哈希(固定用户请求到同一服务器)¶
如果用户需要保持会话一致性(比如购物车数据),可以按用户IP分配:
upstream backend_servers {
ip_hash; # 按IP哈希分配,同一个用户始终访问同一台后端服务器
server 192.168.1.101;
server 192.168.1.102;
}
五、总结¶
- 反向代理:隐藏后端服务器,统一用户入口,安全且便于管理。
- 负载均衡:通过多服务器分担压力,避免单点故障,提升系统稳定性。
- Nginx配置核心:用
upstream定义后端服务器组,用proxy_pass转发请求。
对于初学者,先掌握轮询策略和基本配置即可。随着需求深入,还可以学习更复杂的策略(如健康检查、URL哈希等),但核心思想始终是“合理分配请求,让服务器不卡顿”。
现在,你可以尝试在自己的Linux服务器上配置一个简单的负载均衡环境了!