插件窝 干货文章 使用Nginx Proxy Manager实现负载均衡和高可用性

使用Nginx Proxy Manager实现负载均衡和高可用性

Nginx 负载 Proxy 配置 312    来源:    2025-04-11

使用Nginx Proxy Manager实现负载均衡和高可用性

Nginx Proxy Manager (NPM) 是一个基于Nginx的图形化管理工具,可以简化反向代理、SSL证书管理和负载均衡配置。下面我将详细介绍如何使用NPM实现负载均衡和高可用性。

一、Nginx Proxy Manager基础安装

  1. 安装Docker和Docker Compose(如果尚未安装):

    # Ubuntu/Debian
    sudo apt update
    sudo apt install docker.io docker-compose
    sudo systemctl enable --now docker
    
  2. 创建NPM安装目录并下载docker-compose.yml

    mkdir -p ~/nginx-proxy-manager
    cd ~/nginx-proxy-manager
    curl -L https://bit.ly/npm-docker-compose -o docker-compose.yml
    
  3. 启动NPM

    docker-compose up -d
    
  4. 访问管理界面

    • 默认地址:http://服务器IP:81
    • 默认管理员邮箱:admin@example.com
    • 默认密码:changeme(首次登录后立即修改)

二、配置负载均衡

1. 创建负载均衡器

  1. 登录NPM管理界面
  2. 导航到"Hosts" > "Proxy Hosts" > 点击"Add Proxy Host"
  3. 配置基本设置:

    • Domain Names: 输入您的域名(如lb.example.com
    • Scheme: httphttps
    • Forward Hostname/IP: 可以暂时填写一个后端服务器IP
    • Forward Port: 后端服务端口
    • 勾选"WebSocket Support"(如果需要)
    • 开启"Block Common Exploits"和"Advanced"选项
  4. 在"Custom Locations"或"Advanced"选项卡中配置负载均衡:

    upstream backend {
       server 192.168.1.101:8080;
       server 192.168.1.102:8080;
       server 192.168.1.103:8080;
    
       # 负载均衡方法(默认round-robin)
       # least_conn;   # 最少连接
       # ip_hash;     # IP哈希
       # hash $request_uri consistent; # 一致性哈希
    }
    
    server {
       location / {
           proxy_pass http://backend;
           include proxy_params;
       }
    }
    

2. 负载均衡算法选择

NPM支持多种负载均衡算法:

  1. 轮询(Round Robin):默认方法,请求按顺序分配到各服务器
  2. 最少连接(Least Connections):将请求发送到当前连接数最少的服务器
  3. IP哈希(IP Hash):基于客户端IP分配请求,确保同一客户端始终访问同一服务器
  4. 一致性哈希(Consistent Hashing):基于请求URI分配,适合缓存场景

配置示例:

upstream backend {
    least_conn;  # 使用最少连接算法
    server 192.168.1.101:8080 weight=3;  # 权重3,接收更多请求
    server 192.168.1.102:8080;
    server 192.168.1.103:8080 max_fails=3 fail_timeout=30s;  # 健康检查
}

3. 健康检查配置

NPM可以监控后端服务器健康状态:

server {
    location /health {
        proxy_pass http://backend;
        health_check interval=10s fails=3 passes=2 uri=/health;
    }
}

三、实现高可用性

1. NPM自身高可用

  1. 多节点部署

    • 在不同物理服务器上部署多个NPM实例
    • 使用共享数据库(修改docker-compose.yml中的数据库配置)
  2. 使用Keepalived实现VIP

    # 安装Keepalived
    sudo apt install keepalived
    
    # 配置/etc/keepalived/keepalived.conf
    vrrp_instance VI_1 {
       state MASTER
       interface eth0
       virtual_router_id 51
       priority 100
       advert_int 1
       authentication {
           auth_type PASS
           auth_pass yourpassword
       }
       virtual_ipaddress {
           192.168.1.200/24
       }
    }
    

2. 后端服务器高可用

  1. 会话保持

    upstream backend {
       ip_hash;
       server 192.168.1.101:8080;
       server 192.168.1.102:8080;
    }
    
  2. 故障转移

    server 192.168.1.101:8080 backup;  # 作为备份服务器
    
  3. 慢启动

    server 192.168.1.101:8080 slow_start=30s;
    

四、SSL/TLS配置

  1. 申请Let's Encrypt证书

    • 在NPM界面中导航到"SSL Certificates"
    • 点击"Add SSL Certificate" > "Let's Encrypt"
    • 输入域名和邮箱,勾选"Use a DNS Challenge"
  2. 强制HTTPS和HTTP/2

    • 在代理主机设置中启用"Force SSL"和"HTTP/2 Support"
  3. HSTS配置

    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
    

五、性能优化

  1. 启用缓存

    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
    
    server {
       location / {
           proxy_cache my_cache;
           proxy_cache_valid 200 302 10m;
           proxy_cache_valid 404 1m;
       }
    }
    
  2. 连接池优化

    upstream backend {
       keepalive 32;
       server 192.168.1.101:8080;
    }
    
    server {
       location / {
           proxy_http_version 1.1;
           proxy_set_header Connection "";
       }
    }
    
  3. 缓冲区优化

    proxy_buffers 16 32k;
    proxy_buffer_size 64k;
    proxy_busy_buffers_size 128k;
    

六、监控与日志

  1. 访问日志

    • 在NPM界面中启用详细日志
    • 自定义日志格式: nginx log_format custom '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
  2. Prometheus监控

    • 启用Nginx Prometheus exporter
    • 配置Grafana仪表板
  3. 错误监控

    error_log /var/log/nginx/error.log warn;
    

七、常见问题解决

  1. 502 Bad Gateway

    • 检查后端服务是否运行
    • 验证防火墙设置
    • 检查NPM和后端之间的网络连接
  2. 负载不均衡

    • 确认负载均衡算法配置正确
    • 检查后端服务器性能差异
    • 验证健康检查配置
  3. SSL证书问题

    • 确保证书已正确安装并绑定到代理主机
    • 检查证书是否过期
    • 验证域名解析是否正确

通过以上配置,您可以使用Nginx Proxy Manager构建一个高效、可靠的负载均衡和高可用性解决方案,同时保持配置的简洁性和可管理性。