Nginx 配置从入门到精通:反向代理与负载均衡的详细使用教程

Nginx 配置从入门到精通:反向代理与负载均衡的详细使用教程
前言
在现代化 Web 架构中,Nginx 以其高性能、高并发和灵活性成为最受欢迎的前端服务器之一。无论是搭建简单的博客,还是支撑千万级流量的企业应用,Nginx 都是不可或缺的基础设施。
本教程将带你从零开始,深入理解 Nginx 的反向代理和负载均衡配置,掌握从基础到高级的实用技巧。无论你是刚接触 Nginx 的初学者,还是希望提升配置技能的老手,都能从中受益。
—
第一章:基础概念篇
1.1 什么是反向代理?
反向代理(Reverse Proxy) 是指代理客户端向服务器发送请求的服务。客户端并不直接访问后端服务器,而是将请求发送给反向代理服务器,由它转发给后端服务器,再将结果返回给客户端。
反向代理的核心优势:
- 隐藏后端服务器信息:保护真实服务器 IP 和架构
- 统一入口:为多个后端服务提供单一访问入口
- SSL 终止:在代理层处理 HTTPS,减轻后端压力
- 缓存静态资源:减少对后端服务器的请求
- 负载均衡:将请求分发到多个后端实例
1.2 什么是负载均衡?
负载均衡(Load Balancing) 是将网络流量或计算任务分配到多个服务器上的技术,目的是提高系统的整体性能和可靠性。
负载均衡的主要作用:
- 提高性能:通过分散请求,避免单点过载
- 增强可用性:单台服务器故障时,其他服务器继续提供服务
- 弹性扩展:可以动态添加或移除服务器
- 零停机维护:可以在不影响服务的情况下维护服务器
—
第二章:反向代理配置实战
2.1 基础反向代理配置
让我们从最基础的反向代理配置开始:
“`nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_server;
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;
}
}
配置解析:
- `listen 80`:监听 80 端口
- `server_name`:指定服务器域名
- `proxy_pass`:指定后端服务器的地址
- `proxy_set_header`:设置传递给后端服务器的请求头
2.2 配置 upstream 块
使用 `upstream` 块可以为多个后端服务器定义一个逻辑名称:
nginx
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12: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;
}
}
2.3 完整配置示例
nginx
http {
upstream backend_servers {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=2;
server 192.168.1.12:8080;
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://backend_servers;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
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;
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
}
location /static/ {
proxy_pass http://static_backend;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}
}
---
第三章:负载均衡策略详解
3.1 轮询(Round Robin)- 默认策略
Nginx 默认的负载均衡策略是轮询,每个请求按时间顺序逐一分配到不同的后端服务器。
nginx
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
适用场景: 所有服务器性能相当,且请求处理时间相近。
3.2 权重分配(Weighted Round Robin)
通过设置权重,可以控制不同服务器的负载分配比例。
nginx
upstream backend {
server 192.168.1.10:8080 weight=5;
server 192.168.1.11:8080 weight=3;
server 192.168.1.12:8080 weight=2;
}
工作原理: 权重为 5 的服务器接收的请求数是权重为 1 的服务器的 5 倍。
适用场景: 服务器硬件配置不同,需要按比例分配负载。
3.3 IP 哈希(IP Hash)
IP 哈希策略根据客户端的 IP 地址进行哈希计算,相同 IP 的请求总是被分配到同一台服务器。
nginx
upstream backend {
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
适用场景: 需要保持会话持久性,例如用户登录状态存储在服务器本地。
注意事项: 如果某台服务器宕机,使用该 IP 的用户将无法访问服务,需要配合 `backup` 使用。
3.4 最少连接(Least Connections)
将请求分配给当前活跃连接数最少的服务器。
nginx
upstream backend {
least_conn;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
适用场景: 请求处理时间差异较大,需要更智能的分配策略。
3.5 混合策略示例
nginx
upstream backend {
least_conn;
server 192.168.1.10:8080 weight=3 down;
server 192.168.1.11:8080 weight=2 backup;
server 192.168.1.12:8080;
keepalive 32;
}
状态说明:
- `down`:当前不参与负载均衡
- `backup`:仅在其他服务器不可用时使用
- `keepalive`:保持到后端的长连接数量
---
第四章:高级配置技巧
4.1 健康检查配置
Nginx 支持被动健康检查,通过设置 `max_fails` 和 `fail_timeout` 参数:
nginx
upstream backend {
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8080 max_fails=3 fail_timeout=30s;
}
参数说明:
- `max_fails`:允许失败的次数
- `fail_timeout`:失败后暂停服务的时间
4.2 超时时间优化
合理设置超时时间可以提高用户体验和系统稳定性:
nginx
server {
listen 80;
location / {
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
proxy_next_upstream_tries 3;
}
}
4.3 请求重试机制
nginx
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
proxy_next_upstream_tries 3;
proxy_next_upstream_timeout 10s;
}
}
---
第五章:性能调优建议
5.1 连接池优化
nginx
http {
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
keepalive 64;
keepalive_requests 1000;
keepalive_timeout 60s;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection “”;
}
}
}
5.2 缓冲区配置
nginx
location / {
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 16k;
proxy_busy_buffers_size 24k;
proxy_max_temp_file_size 128m;
}
5.3 压缩配置
nginx
http {
gzip on;
gzip_min_length 1k;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
}
5.4 核心参数优化
nginx
http {
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
}
}
---
第六章:生产环境最佳实践
6.1 配置安全检查
nginx
server {
listen 80;
server_name example.com;
# 安全相关头
add_header X-Frame-Options “SAMEORIGIN” always;
add_header X-Content-Type-Options “nosniff” always;
add_header X-XSS-Protection “1; mode=block” always;
add_header Referrer-Policy “strict-origin-when-cross-origin” always;
# HTTPS 强制跳转
if ($scheme != “https”) {
return 301 https://$host$request_uri;
}
}
6.2 日志配置优化
nginx
http {
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for” ‘
‘rt=$request_time uct=”$upstream_connect_time” ‘
‘uhrt=”$upstream_header_time” urt=”$upstream_response_time”‘;
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
}
6.3 配置测试与部署
bash
测试配置语法
nginx -t
重新加载配置(不中断服务)
nginx -s reload
检查配置并重新加载
systemctl reload nginx
查看运行状态
systemctl status nginx
“`
—
总结
通过本教程,你已经掌握了 Nginx 反向代理与负载均衡的核心配置技能:
- 理解了反向代理和负载均衡的基本概念
- 掌握了 upstream 块的配置方法
- 学会了四种主流负载均衡策略
- 了解了健康检查和请求重试机制
- 掌握了性能调优的关键参数
- 熟悉了生产环境的最佳实践
- 在实际环境中测试配置
- 监控性能指标并持续优化
- 学习 Nginx 的更多高级特性(如缓存、限流等)
记住,Nginx 的强大之处在于灵活性和可扩展性。根据你的具体业务需求,不断调整和优化配置,才能发挥它的最大价值。
下一步建议:
—
*本文档最后更新时间:2026 年 04 月 27 日*



发表评论