Nginx Proxy Manager (NPM) 是一个基于Docker的轻量级反向代理管理工具,为容器化和微服务架构提供了便捷的代理管理方案。以下是针对NPM环境的容器与微服务部署策略。
推荐方案: - 为NPM和微服务创建专用Docker网络
docker network create proxy-network
docker network connect proxy-network nginx-proxy-manager
docker network connect proxy-network your-service
实现方式: - 使用Docker标签自动发现服务
# docker-compose.yml示例
services:
your-service:
labels:
- "npm.proxy.host=example.com"
- "npm.proxy.port=3000"
- "npm.proxy.ssl=true"
curl -X POST http://npm-api/proxy-hosts \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{
"domain_names": ["example.com"],
"forward_host": "your-service",
"forward_port": 3000,
"ssl_forced": true
}'
最佳实践: - 基于路径的路由
https://api.example.com/service1
https://api.example.com/service2
https://service1.example.com
https://service2.example.com
https://api.example.com/v1/service1
https://service2.example.com/api/v2
关键措施: - 强制HTTPS重定向 - 自动SSL证书申请与续期 - 访问控制列表(ACL)配置 - 基础认证保护 - 请求速率限制
# docker-compose.yml片段
services:
app-blue:
image: your-app:1.0
networks:
- proxy-network
labels:
- "npm.proxy.host=app.example.com"
- "npm.proxy.port=3000"
- "npm.proxy.group=production"
- "npm.proxy.weight=50"
app-green:
image: your-app:2.0
networks:
- proxy-network
labels:
- "npm.proxy.host=app.example.com"
- "npm.proxy.port=3000"
- "npm.proxy.group=production"
- "npm.proxy.weight=50"
# 通过NPM API调整流量权重
curl -X PATCH http://npm-api/proxy-hosts/1 \
-H "Authorization: Bearer API_KEY" \
-H "Content-Type: application/json" \
-d '{
"traffic_weights": {
"app-v1": 90,
"app-v2": 10
}
}'
# Prometheus配置示例
scrape_configs:
- job_name: 'nginx-proxy-manager'
static_configs:
- targets: ['nginx-proxy-manager:81']
连接池配置:
缓存策略:
负载均衡:
常见问题:
日志分析:
docker logs nginx-proxy-manager
# docker-compose健康检查示例
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 3
Nginx Proxy Manager为容器化和微服务架构提供了灵活、易用的代理管理方案。通过合理的网络设计、自动化配置和高级部署模式,可以构建出高效、可靠的服务代理架构。建议结合CI/CD流水线实现全自动化的部署与配置管理。