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.101192.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:测试配置

  1. 检查配置语法
    执行 sudo nginx -t,确保没有语法错误。如果输出 syntax is oktest is successful,说明配置没问题。

  2. 重启Nginx
    执行 sudo systemctl restart nginx 使配置生效。

  3. 测试负载均衡
    用浏览器访问Nginx服务器的IP(比如 http://192.168.1.100,假设Nginx装在这台服务器上),你会发现请求会被轮流分配给 192.168.1.101192.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服务器上配置一个简单的负载均衡环境了!

小夜