Nginx Proxy Manager (NPM) 是一个基于Docker的轻量级反向代理管理工具,其核心架构由以下组件构成:
version: '3'
services:
app:
networks:
- frontend
- backend
nginx:
networks:
- frontend
- dmz
db:
networks:
- backend
networks:
frontend:
driver: bridge
backend:
internal: true # 禁止外部直接访问
dmz:
driver: bridge
# 强制HTTPS配置示例
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 启用现代加密套件
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
}
客户端 → 云负载均衡器 (AWS ALB/GCP LB)
↳ NPM实例组1 (可用区A)
↳ NPM实例组2 (可用区B)
↳ NPM实例组3 (可用区C)
# Docker健康检查示例
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/api/health"]
interval: 30s
timeout: 10s
retries: 3
location /metrics {
allow 192.168.1.0/24; # 仅限内部网络
deny all;
stub_status on;
access_log off;
}
# Filebeat配置示例
filebeat.inputs:
- type: container
paths:
- '/var/lib/docker/containers/*/*.log'
processors:
- add_docker_metadata: ~
output.elasticsearch:
hosts: ["elasticsearch:9200"]
定期更新:
访问控制:
location /admin {
allow 10.0.0.0/8;
deny all;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
WAF集成:
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
速率限制:
limit_req_zone $binary_remote_addr zone=api:10m rate=100r/m;
location /api/ {
limit_req zone=api burst=50;
}
配置备份:
# 每日备份数据库和Nginx配置
0 3 * * * docker exec npm_db pg_dump -U npm > /backups/npm-$(date +\%F).sql
快速重建流程:
1. 拉取最新Docker镜像
2. 恢复数据库备份
3. 挂载配置文件卷
4. 启动容器
多区域部署:
resource "aws_instance" "npm_east" {
ami = "ami-123456"
instance_type = "t3.medium"
subnet_id = aws_subnet.east.id
}
resource "aws_instance" "npm_west" {
ami = "ami-123456"
instance_type = "t3.medium"
subnet_id = aws_subnet.west.id
}
通过以上架构设计和安全实践,可以构建一个既安全又可靠的Nginx Proxy Manager部署环境,满足企业级应用的需求。