2026年03月27日-Nginx高性能负载均衡配置实战 一、Nginx负载均衡基础配置 1.1 负载均衡算法 Nginx支持多种负载均衡算法,根据业务场景选择合适的算法至关重要。 轮询(Round Robin) - 默认算法 加权轮询(Weighted Round Robin) IP哈希(IP Hash) - 保证同一客户端访问同一后端服务器 最少连接(Least Connections) - 将请求分配给活动连接数最少的服务器 二、高级负载均衡配置 2.1 健康检查与故障转移 配置Nginx自动检测后端服务器健康状态,自动隔离故障节点: 参数说明: maxfails:允许的最大失败次数 failtimeout:失败后的暂停时间 backup:标记为备用服务器 2.
Nginx支持多种负载均衡算法,根据业务场景选择合适的算法至关重要。
轮询(Round Robin) - 默认算法
upstream backend_servers { 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_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
加权轮询(Weighted Round Robin)
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 weight=1; }
IP哈希(IP Hash) - 保证同一客户端访问同一后端服务器
upstream backend_servers { ip_hash; server 192.168.1.10:8080; server 192.168.1.11:8080; server 192.168.1.12:8080; }
最少连接(Least Connections) - 将请求分配给活动连接数最少的服务器
upstream backend_servers { least_conn; server 192.168.1.10:8080; server 192.168.1.11:8080; server 192.168.1.12:8080; }
配置Nginx自动检测后端服务器健康状态,自动隔离故障节点:
upstream backend_servers { 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; # 备用服务器(只在所有主服务器都不可用时使用) server 192.168.1.20:8080 backup; }
参数说明:
对于需要保持会话状态的应用,可以使用sticky模块:
upstream backend_servers { sticky cookie srv_id expires=1h domain=.example.com path=/; server 192.168.1.10:8080; server 192.168.1.11:8080; server 192.168.1.12:8080; }
# 工作进程数(建议设置为CPU核心数) worker_processes auto; # 每个工作进程的最大连接数 events { worker_connections 10240; use epoll; multi_accept on; } # 保持连接超时时间 keepalive_timeout 65; keepalive_requests 10000; # 启用高效文件传输 sendfile on; tcp_nopush on; tcp_nodelay on;
# 客户端请求体缓冲区大小 client_body_buffer_size 128k; client_max_body_size 10m; # 代理缓冲区配置 proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 8 4k; proxy_busy_buffers_size 8k; # 启用缓存 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m; server { location / { proxy_cache my_cache; proxy_cache_valid 200 304 12h; proxy_cache_key "$scheme$request_method$host$request_uri"; proxy_pass http://backend_servers; } }
某电商平台需要支撑日均1000万PV,峰值QPS达到5000,要求高可用性和低延迟。
# 主配置文件 nginx.conf user nginx; worker_processes auto; worker_cpu_affinity auto; worker_rlimit_nofile 65535; events { worker_connections 10240; use epoll; multi_accept on; } http { include /etc/nginx/mime.types; default_type application/octet-stream; # 日志格式 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" ' 'uht="$upstream_header_time" urt="$upstream_response_time"'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn; # 性能优化 sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # Gzip压缩 gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css application/json application/javascript text/xml application/xml; # 限流配置 limit_req_zone $binary_remote_addr zone=api_limit:10m rate=100r/s; limit_conn_zone $binary_remote_addr zone=conn_limit:10m; # 动态服务器组 upstream api_servers { least_conn; server 192.168.1.10:8080 weight=3 max_fails=3 fail_timeout=30s; server 192.168.1.11:8080 weight=3 max_fails=3 fail_timeout=30s; server 192.168.1.12:8080 weight=2 max_fails=3 fail_timeout=30s; server 192.168.1.13:8080 weight=2 max_fails=3 fail_timeout=30s; keepalive 32; } # 静态资源服务器组 upstream static_servers { server 192.168.2.10:80; server 192.168.2.11:80; keepalive 16; } # API服务配置 server { listen 80; server_name api.example.com; # 限流保护 limit_req zone=api_limit burst=200 nodelay; limit_conn conn_limit 50; location / { proxy_pass http://api_servers; proxy_http_version 1.1; proxy_set_header Connection ""; 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_connect_timeout 5s; proxy_send_timeout 10s; proxy_read_timeout 30s; # 缓冲设置 proxy_buffering on; proxy_buffer_size 8k; proxy_buffers 16 8k; } # 健康检查端点 location /health { access_log off; return 200 "healthy\n"; add_header Content-Type text/plain; } } # 静态资源配置 server { listen 80; server_name static.example.com; location / { proxy_pass http://static_servers; proxy_cache static_cache; proxy_cache_valid 200 304 7d; proxy_cache_key "$scheme$request_method$host$request_uri"; expires 7d; add_header X-Cache-Status $upstream_cache_status; } } }
使用Keepalived实现Nginx高可用:
# 安装keepalived apt install keepalived -y # /etc/keepalived/keepalived.conf vrrp_script check_nginx { script "/usr/bin/systemctl is-active nginx" interval 2 weight -20 } vrrp_instance VI_1 { state MASTER # BACKUP on slave interface eth0 virtual_router_id 51 priority 100 # 90 on slave advert_int 1 authentication { auth_type PASS auth_pass 1234 } virtual_ipaddress { 192.168.1.100 } track_script { check_nginx } }
# 启用nginx状态页面 server { listen 80; server_name status.example.com; location /nginx_status { stub_status on; access_log off; allow 192.168.1.0/24; deny all; } }
使用Prometheus + Grafana监控Nginx性能:
# 安装nginx-prometheus-exporter # 导出metrics到Prometheus # 关键监控指标 - active_connections: 活动连接数 - accepts: 接受的连接总数 - handled: 处理的连接总数 - requests: 处理的请求数 - reading: 正在读取请求头 - writing: 正在写入响应 - waiting: 等待请求的空闲连接
Nginx负载均衡配置需要根据业务特点、流量模式和性能要求进行综合设计。关键点包括:
通过合理配置,Nginx可以支撑千万级PV的高并发访问,保证系统稳定性和用户体验。