负载均衡是通过将网络流量分发到多个服务器来提高系统性能、可靠性和可用性的技术。Nginx作为高性能的反向代理服务器,可以实现HTTP、HTTPS、TCP和UDP等多种协议的负载均衡。
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
Nginx支持多种负载均衡算法:
upstream backend {
# 加权轮询示例
server backend1.example.com weight=3;
server backend2.example.com weight=2;
server backend3.example.com;
# 最少连接示例
# least_conn;
# IP哈希示例
# ip_hash;
# 通用哈希示例
# hash $request_uri consistent;
}
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=30s;
server backend2.example.com max_fails=3 fail_timeout=30s;
# 被动健康检查参数
# max_fails - 失败次数阈值
# fail_timeout - 失败后暂停时间
}
upstream backend {
zone backend 64k;
server backend1.example.com;
server backend2.example.com;
health_check interval=5s fails=3 passes=2 uri=/health;
}
upstream backend {
ip_hash; # 基于IP的会话保持
# 或者使用cookie
# sticky cookie srv_id expires=1h domain=.example.com path=/;
server backend1.example.com;
server backend2.example.com;
}
# 第一级负载均衡
upstream frontend {
server nginx-lb1.example.com;
server nginx-lb2.example.com;
}
# 第二级负载均衡
upstream backend {
server app-server1.example.com;
server app-server2.example.com;
server app-server3.example.com;
}
stream {
upstream tcp_backend {
server backend1.example.com:3306;
server backend2.example.com:3306;
}
server {
listen 3306;
proxy_pass tcp_backend;
}
}
upstream backend {
zone backend 64k;
state /var/lib/nginx/state/backend.conf;
server backend1.example.com resolve;
server backend2.example.com resolve;
}
server {
listen 8080;
location /status {
stub_status;
allow 192.168.1.0/24;
deny all;
}
location /upstream_conf {
upstream_conf;
allow 127.0.0.1;
deny all;
}
}
log_format upstream_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'rt=$request_time uct="$upstream_connect_time" '
'uht="$upstream_header_time" urt="$upstream_response_time" '
'upstream_addr=$upstream_addr';
access_log /var/log/nginx/access.log upstream_log;
upstream backend {
server backend1.example.com:443;
server backend2.example.com:443;
}
server {
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass https://backend;
proxy_ssl_verify on;
proxy_ssl_trusted_certificate /path/to/ca.pem;
proxy_ssl_verify_depth 2;
}
}
proxy_buffers 16 32k;
proxy_buffer_size 64k;
proxy_busy_buffers_size 128k;
upstream backend {
keepalive 32;
server backend1.example.com;
server backend2.example.com;
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
通过以上配置,您可以构建一个高性能、高可用的Web集群系统。根据实际业务需求和环境特点,可以灵活调整各项参数以达到最佳效果。