反向代理 vs 负载均衡:何时使用及 Nginx 配置

Backend2026-09-23TryQuickToolBox

你可能经常听到“反向代理”和“负载均衡”这两个术语被互换使用。但在配置 Nginx 时,了解它们的区别至关重要——这会影响你如何架构基础设施、处理 SSL 以及扩展应用。

本指南将消除这些困惑。你将了解它们各自的作用、何时使用哪一个,以及如何在 Nginx 中通过清晰实用的示例进行设置。

什么是反向代理?

反向代理位于客户端和后端服务器之间。它接收客户端请求,将其转发到相应的后端,并返回响应。客户端从不直接与后端通信。

常见用途:

Nginx 通常用作 Node.js、Python(Gunicorn/uWSGI)或 Java(Tomcat)等应用服务器前面的反向代理。

什么是负载均衡?

负载均衡器将传入流量分发到多个后端服务器。其主要目标是提高可用性、可扩展性和容错能力。

关键特性:

负载均衡器可以是硬件(F5、Citrix)或软件(Nginx、HAProxy、云负载均衡器)。Nginx 的 upstream 模块使其成为一个强大的软件负载均衡器。

反向代理 vs 负载均衡:关键区别

方面 反向代理 负载均衡器
主要目的 转发请求,添加功能(SSL、缓存) 将负载分发到多个服务器
后端数量 通常一个(或几个) 多个,通常很多
重点 功能性、安全性、性能 可扩展性、高可用性
健康检查 可选 必需

实际上,负载均衡器是一种专门的反向代理。许多工具(包括 Nginx)可以同时完成两者。

何时使用反向代理

在以下情况使用反向代理:

示例: 一个运行在端口 3000 上的 Node.js API,由 Nginx 处理 HTTPS 并提供静态文件。

server {
    listen 443 ssl;
    server_name api.example.com;

    ssl_certificate /etc/nginx/ssl/api.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/api.example.com.key;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

何时使用负载均衡

在以下情况使用负载均衡:

示例: 三个 Node.js 实例通过 Nginx 使用轮询方式负载均衡。

upstream backend {
    server 10.0.0.1:3000;
    server 10.0.0.2:3000;
    server 10.0.0.3:3000;
}

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Nginx 将均匀分发请求。你可以添加健康检查和其他参数来微调行为。

在 Nginx 中结合两种角色

大多数实际部署中,Nginx 同时用作反向代理和负载均衡器。例如:

upstream app_servers {
    least_conn;
    server 10.0.0.1:3000 max_fails=3 fail_timeout=30s;
    server 10.0.0.2:3000 max_fails=3 fail_timeout=30s;
    server 10.0.0.3:3000 backup;
}

server {
    listen 443 ssl;
    server_name app.example.com;

    ssl_certificate /etc/nginx/ssl/app.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/app.example.com.key;

    location /static/ {
        root /var/www/static;
        expires 30d;
    }

    location / {
        proxy_pass http://app_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

在这里,Nginx 终止 SSL、提供静态文件,并通过健康检查在三个应用服务器之间进行负载均衡。

Nginx 作为反向代理/负载均衡器的最佳实践

分析 Nginx 日志对于发现瓶颈至关重要。像 Nginx 日志分析器 这样的工具可以帮助你解析访问日志,快速识别缓慢的上游或错误。

常见问题

Nginx 可以同时作为反向代理和负载均衡器吗?

可以。Nginx 可以同时终止 SSL、缓存内容并将请求分发到多个后端。upstream 块定义后端池,而 proxy_pass 指令转发请求。

如果只有一个后端服务器,我需要负载均衡器吗?

不一定。仅反向代理就可以处理 SSL、缓存和安全性。但添加具有多个后端的负载均衡器可以提高可用性——如果一台服务器故障,其他服务器可以继续服务流量。

Nginx 如何选择将请求发送到哪个后端?

默认情况下,Nginx 使用轮询。你可以通过 least_conn(最少连接)、ip_hash(基于客户端 IP 的会话保持)或 hash(自定义键)等指令更改此行为。

准备好优化你的 Nginx 设置了吗?首先使用我们的 免费 Nginx 日志解析器 分析日志,发现性能问题并微调配置。