构建基于Nginx Proxy Manager的高可用负载均衡系统需要考虑以下核心组件:
# 使用Docker Compose部署Nginx Proxy Manager集群
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: always
ports:
- '80:80'
- '81:81'
- '443:443'
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
depends_on:
- db
networks:
- proxy-network
db:
image: 'mariadb:latest'
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./data/mysql:/var/lib/mysql
networks:
- proxy-network
networks:
proxy-network:
driver: bridge
使用Keepalived + HAProxy实现Nginx Proxy Manager前端的高可用:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server npm1 192.168.1.101:80 check
server npm2 192.168.1.102:80 check backup
frontend https_front
bind *:443
mode tcp
default_backend https_back
backend https_back
mode tcp
balance roundrobin
server npm1 192.168.1.101:443 check
server npm2 192.168.1.102:443 check backup
在Nginx Proxy Manager中: - 使用TLS 1.2/1.3 - 启用HTTP/2 - 配置强密码套件 - 设置合理的证书缓存时间
根据应用特点选择合适的负载均衡算法: - 轮询 (round-robin) - 最少连接 (least_conn) - IP哈希 (ip_hash) - 加权分配
upstream backend {
server backend1.example.com;
server backend2.example.com;
# 健康检查配置
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
# 工作进程与连接数
worker_processes auto;
worker_rlimit_nofile 100000;
events {
worker_connections 4000;
use epoll;
multi_accept on;
}
http {
# 缓冲区优化
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;
# 超时设置
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
# 其他优化
sendfile on;
tcp_nopush on;
tcp_nodelay on;
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
add_header X-Proxy-Cache $upstream_cache_status;
}
}
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;
#!/bin/bash
# Nginx Proxy Manager自动备份脚本
BACKUP_DIR="/backups/npm"
DATE=$(date +%Y%m%d_%H%M%S)
DB_USER="npm"
DB_PASS="npm"
DB_NAME="npm"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份数据库
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/npm_db_$DATE.sql
# 备份配置和证书
tar -czvf $BACKUP_DIR/npm_config_$DATE.tar.gz /data/nginx-proxy-manager
# 保留最近7天的备份
find $BACKUP_DIR -type f -mtime +7 -delete
访问控制:
防火墙规则:
# 只允许必要端口
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 22/tcp
ufw enable
定期更新:
502 Bad Gateway
SSL握手失败
性能下降
通过以上实践,您可以构建一个高可用、高性能的Nginx Proxy Manager负载均衡系统,能够满足企业级应用的需求。