Nginx Proxy Manager (NPM) 是一个基于Nginx的图形化管理界面,可以简化反向代理、SSL证书管理等操作。将其与容器编排工具(如Docker Compose、Kubernetes)集成,可以显著提升开发团队的效率。
典型docker-compose.yml配置:
version: '3'
services:
app:
image: your-application-image
environment:
- VIRTUAL_HOST=app.yourdomain.com
- VIRTUAL_PORT=3000
networks:
- proxy-network
npm:
image: 'jc21/nginx-proxy-manager:latest'
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
- proxy-network
restart: unless-stopped
networks:
proxy-network:
driver: bridge
优势:
- 自动服务发现:通过VIRTUAL_HOST
环境变量自动配置代理
- 简化SSL证书管理:通过Web界面一键申请Let's Encrypt证书
- 开发环境一致性:所有团队成员使用相同的代理配置
使用Ingress Controller:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: app.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80
NPM在K8s中的部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: npm
spec:
replicas: 1
selector:
matchLabels:
app: npm
template:
metadata:
labels:
app: npm
spec:
containers:
- name: npm
image: jc21/nginx-proxy-manager:latest
ports:
- containerPort: 80
- containerPort: 81
- containerPort: 443
volumeMounts:
- mountPath: /data
name: npm-data
- mountPath: /etc/letsencrypt
name: npm-letsencrypt
volumes:
- name: npm-data
persistentVolumeClaim:
claimName: npm-data-pvc
- name: npm-letsencrypt
persistentVolumeClaim:
claimName: npm-letsencrypt-pvc
自动化配置
可视化界面
环境一致性
快速部署
网络隔离
持久化存储
访问控制
监控集成
问题1: 代理规则不生效
- 检查容器网络是否连通
- 验证VIRTUAL_HOST
环境变量设置正确
问题2: SSL证书申请失败 - 检查域名解析是否正确 - 验证80/443端口可被Let's Encrypt服务器访问
问题3: 性能瓶颈 - 调整NPM工作进程数 - 考虑启用HTTP/2和缓存
通过将Nginx Proxy Manager与容器编排工具集成,开发团队可以专注于业务逻辑开发,而无需花费大量时间在基础设施配置上,显著提升整体开发效率。