在云原生与容器化部署日益普及的今天,反向代理和 HTTPS 加密已成为 Web 服务的基础设施。然而,手动编写 Nginx 配置文件、申请续期 SSL 证书仍然让不少运维和开发者头疼。本文将带你用 Docker Compose 快速部署 Nginx Proxy Manager(NPM),通过可视化面板轻松完成反向代理配置与 SSL 证书管理,即使不熟悉 Nginx 语法也能快速上手。
一、为什么选择 Nginx Proxy Manager?
Nginx Proxy Manager 是一款基于 Nginx 构建的开源可视化管理面板,它把繁琐的命令行配置搬到了浏览器里。相比传统方式,它的核心优势体现在以下几个方面:
- 图形化操作:所有反向代理规则通过网页表单完成,告别手写配置文件;
- 一键 SSL 证书:内置 Let's Encrypt 集成,自动申请、自动续期,无需手动干预;
- 第三方证书导入:兼容阿里云、腾讯云等平台的 SSL 证书文件;
- 安全防护能力:支持强制 HTTPS 跳转、WebSocket 代理、常见漏洞拦截、访问白名单等;
- 容器化部署:基于 Docker 运行,环境隔离彻底,迁移和备份都非常方便。
对于已经在使用 Kubernetes 或 K8s 容器编排的团队来说,NPM 同样可以作为 Ingress 之外的轻量级替代方案,尤其适合中小规模服务暴露场景。
系统默认的登录凭据如下:
- 邮箱:
admin@example.com - 密码:
changeme
首次登录必须修改管理员账号密码,保障面板安全。
二、Docker Compose 一键部署 Nginx Proxy Manager
1. 编写 docker-compose.yml 文件
首先创建一个部署目录,然后新建 文件。下面的配置使用了国内华为云镜像源,可以显著提升镜像拉取速度,尤其适合国内网络环境:docker-compose.yml
version: "3"
services:
app:
image: 'swr.cn-north-1.myhuaweicloud.com/iivey/nginx-proxy-manager:v1.0'
restart: unless-stopped
ports:
- '80:80' # HTTP端口
- '443:443' # HTTPS端口
- '81:81' # 管理面板端口
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data # 持久化面板配置
- ./letsencrypt:/etc/letsencrypt # 持久化SSL证书
depends_on:
- db
db:
image: 'swr.cn-north-1.myhuaweicloud.com/iivey/mariadb-aria:v1.0'
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./data/mysql:/var/lib/mysql # 持久化数据库
配置中包含了 NPM 的应用容器和数据库容器,数据持久化到本地目录,保证重启后配置不丢失。
2. 启动服务
在配置文件所在目录执行以下命令,即可一键拉起 NPM 服务:
# 后台启动容器
docker-compose up -d
# 查看运行状态
docker-compose ps

服务启动完成后,打开浏览器访问 ,就能看到 Nginx Proxy Manager 的登录界面了。http://服务器IP:81

⚠️ 如果你的服务器开启了防火墙,请确保放行 81、80 和 443 端口,否则面板将无法访问。
[AFFILIATE_SLOT_1]三、反向代理配置实战
3.1 登录面板并修改默认账号
访问 ,使用默认凭据登录:http://服务器IP:81
- 邮箱:
admin@example.com - 密码:
changeme
首次登录后系统会强制要求修改管理员邮箱、用户名和密码,修改完成后使用新凭据重新登录即可。

3.2 创建反向代理主机
进入面板首页,点击 Proxy Hosts(代理主机),然后点击右上角的 Add Proxy Host(添加代理主机) 按钮。

在弹窗中需要填写以下关键参数:
- Domain Names(域名):填写已解析到当前服务器的域名,需提前在域名服务商处添加 A 记录;
- Scheme:后端服务的协议类型,通常选择
;http - Forward Hostname/IP:后端服务地址。如果是本机 Docker 容器,填写
;外部服务则填写对应 IP;172.17.0.1 - Forward Port:后端服务监听端口,例如 Zabbix 的 8080、云桌面的 6080 等。
此外还有两个推荐开启的选项:
:拦截常见的 Web 漏洞攻击;Block Common Exploits:支持 WebSocket 协议,适配实时通信类服务。Websockets Support

确认无误后点击 保存,基础的反向代理就配置完成了。Save

配置完成后,访问域名即可自动转发到后端服务,无需手动暴露后端端口。
四、SSL 证书配置:两种方式实现全站 HTTPS
Nginx Proxy Manager 提供两种 SSL 证书配置途径:自动申请 Let's Encrypt 免费证书 和 导入第三方证书。下面分别介绍。
方式一:自动申请 Let's Encrypt 证书(推荐)✅
编辑已创建的代理主机,切换到 选项卡,按以下步骤操作:SSL
- SSL Certificate 选择
;Request a new SSL Certificate - 开启
,实现 HTTP 自动跳转 HTTPS;Force SSL - 填写用于证书到期提醒的邮箱,并勾选同意证书服务协议;
- 点击保存,面板会自动完成证书申请、部署和配置。
证书到期前 NPM 会自动续期,完全无需人工干预。

方式二:导入阿里云/腾讯云第三方 SSL 证书
步骤 1:申请免费证书
登录阿里云 SSL 证书服务,领取 DV 单域名免费试用证书,下载 私钥文件和 key 证书文件。pem

步骤 2:在面板中导入证书
点击顶部导航栏的 ,选择 SSL Certificates → Add SSL Certificate。Custom

填写自定义的证书名称,然后分别上传以下文件:
Certificate Key(key私钥)Certificate(pem证书)Intermediate Certificate(中间证书)

保存后回到代理主机的 SSL 选项卡,选择刚导入的证书并开启强制 HTTPS 即可生效。
如果你未来计划将服务迁移到 Kubernetes 集群,NPM 中配置的域名和证书逻辑可以平滑迁移到 Ingress 资源中,容器化部署的灵活性在这里体现得淋漓尽致。
[AFFILIATE_SLOT_2]五、总结
本文完整演示了基于 Docker Compose 部署 Nginx Proxy Manager 的全过程,覆盖了反向代理配置、Let's Encrypt 证书自动申请、第三方证书导入以及 HTTPS 强制加密等核心操作。NPM 将传统 Nginx 运维中的复杂步骤转化为可视化操作,大幅降低了技术门槛。结合 Docker 的容器化部署特性,它能够良好适配 CentOS、银河麒麟 V10 等操作系统,广泛适用于网站发布、内网服务外网暴露、监控系统域名访问等场景,是云原生运维工具箱中值得常备的实用利器。
浙公网安备 33010602011771号