Nginx Proxy Manager (NPM) 集群通常采用以下架构: - 主从模式:1个主节点 + 多个从节点 - 负载均衡:前端使用负载均衡器分发请求 - 共享数据库:所有节点连接同一个数据库(MySQL/PostgreSQL) - 共享存储:用于证书和配置文件的共享存储(NFS/S3等)
# MySQL示例配置
CREATE DATABASE npm;
CREATE USER 'npm'@'%' IDENTIFIED BY 'securepassword';
GRANT ALL PRIVILEGES ON npm.* TO 'npm'@'%';
FLUSH PRIVILEGES;
# NFS服务器设置(以Ubuntu为例)
sudo apt install nfs-kernel-server
sudo mkdir /mnt/npm_data
sudo chown -R nobody:nogroup /mnt/npm_data
sudo chmod -R 777 /mnt/npm_data
# 在/etc/exports中添加
/mnt/npm_data *(rw,sync,no_subtree_check,no_root_squash)
# 重启NFS服务
sudo systemctl restart nfs-kernel-server
所有节点使用相同的docker-compose.yml配置:
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: always
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- /mnt/npm_data:/data
- /mnt/npm_data/letsencrypt:/etc/letsencrypt
environment:
DB_MYSQL_HOST: "数据库服务器IP"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "securepassword"
DB_MYSQL_NAME: "npm"
使用HAProxy或另一个Nginx实例作为前端负载均衡器:
# HAProxy示例配置
frontend http_front
bind *:80
bind *:443 ssl crt /etc/ssl/certs/yourdomain.pem
option forwardfor
default_backend npm_nodes
backend npm_nodes
balance roundrobin
server npm1 192.168.1.101:80 check
server npm2 192.168.1.102:80 check
server npm3 192.168.1.103:80 check
症状:某些节点配置缺失或不一致
解决:
- 确保所有节点挂载相同的共享存储
- 检查文件权限(通常需要777)
- 重启受影响节点的NPM容器
症状:Let's Encrypt证书在某些节点更新失败
解决:
# 在所有节点上执行
docker exec -it npm_app_1 /bin/bash
./usr/local/bin/node ./bin/renew-certificates.js
症状:节点无法连接数据库
解决:
- 检查数据库服务器防火墙规则
- 验证数据库用户权限
- 增加数据库连接池大小(在NPM高级设置中)
症状:响应缓慢或超时
解决:
- 增加节点数量
- 优化数据库性能(添加索引等)
- 启用NPM缓存功能
# 使用ELK或类似方案收集日志
docker logs npm_app_1 > npm.log
通过以上配置和策略,您可以建立一个高可用的Nginx Proxy Manager集群,确保服务持续可用并能够快速从故障中恢复。