Nginx负载均衡与高可用配置指南

软件部署

Nginx负载均衡与高可用配置指南

Nginx是一款高性能的Web服务器和反向代理服务器,广泛应用于负载均衡场景。本文将详细介绍Nginx负载均衡的配置方法。

基础配置

1. 安装Nginx

CentOS/RHEL

# 安装EPEL仓库
sudo yum install epel-release

# 安装Nginx
sudo yum install nginx

# 启动服务
sudo systemctl start nginx
sudo systemctl enable nginx

Ubuntu/Debian

# 更新包索引
sudo apt update

# 安装Nginx
sudo apt install nginx

# 启动服务
sudo systemctl start nginx
sudo systemctl enable nginx

Docker安装

docker run -d \
  --name nginx-lb \
  -p 80:80 \
  -p 443:443 \
  -v /path/to/nginx.conf:/etc/nginx/nginx.conf:ro \
  -v /path/to/ssl:/etc/nginx/ssl:ro \
  nginx:alpine

2. 基础配置文件

# /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 4096;
    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;

    # 性能优化
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    # Gzip压缩
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml application/json application/javascript 
               application/rss+xml application/atom+xml image/svg+xml;

    # 包含其他配置
    include /etc/nginx/conf.d/*.conf;
}

负载均衡配置

1. upstream配置

# /etc/nginx/conf.d/upstream.conf

# 基础upstream配置
upstream backend {
    server 192.168.1.10:8080 weight=5;
    server 192.168.1.11:8080 weight=5;
    server 192.168.1.12:8080 backup;
    server 192.168.1.13:8080 down;
}

# 不同负载均衡算法

# 轮询(默认)
upstream backend_round_robin {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

# 加权轮询
upstream backend_weighted {
    server 192.168.1.10:8080 weight=5;
    server 192.168.1.11:8080 weight=3;
    server 192.168.1.12:8080 weight=2;
}

# IP哈希(会话保持)
upstream backend_ip_hash {
    ip_hash;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

# 最少连接
upstream backend_least_conn {
    least_conn;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

# 加权最少连接
upstream backend_least_conn_weighted {
    least_conn;
    server 192.168.1.10:8080 weight=5;
    server 192.168.1.11:8080 weight=3;
}

# 一致性哈希
upstream backend_consistent_hash {
    hash $request_uri consistent;
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

2. 反向代理配置

# /etc/nginx/conf.d/proxy.conf
server {
    listen 80;
    server_name api.example.com;

    # 日志
    access_log /var/log/nginx/api.access.log main;
    error_log /var/log/nginx/api.error.log warn;

    # 客户端限制
    client_max_body_size 50m;
    client_body_buffer_size 128k;

    location / {
        proxy_pass