在云原生与容器化部署日益普及的今天,反向代理和 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

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

⚠️ 如果你的服务器开启了防火墙,请确保放行 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 容器,填写 172.17.0.1;外部服务则填写对应 IP;
  • Forward Port:后端服务监听端口,例如 Zabbix 的 8080、云桌面的 6080 等。

此外还有两个推荐开启的选项:

  • Block Common Exploits:拦截常见的 Web 漏洞攻击;
  • Websockets Support:支持 WebSocket 协议,适配实时通信类服务。

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

配置完成后,访问域名即可自动转发到后端服务,无需手动暴露后端端口。

四、SSL 证书配置:两种方式实现全站 HTTPS

Nginx Proxy Manager 提供两种 SSL 证书配置途径:自动申请 Let's Encrypt 免费证书导入第三方证书。下面分别介绍。

方式一:自动申请 Let's Encrypt 证书(推荐)✅

编辑已创建的代理主机,切换到 SSL 选项卡,按以下步骤操作:

  1. SSL Certificate 选择 Request a new SSL Certificate
  2. 开启 Force SSL,实现 HTTP 自动跳转 HTTPS;
  3. 填写用于证书到期提醒的邮箱,并勾选同意证书服务协议;
  4. 点击保存,面板会自动完成证书申请、部署和配置。

证书到期前 NPM 会自动续期,完全无需人工干预。

方式二:导入阿里云/腾讯云第三方 SSL 证书

步骤 1:申请免费证书

登录阿里云 SSL 证书服务,领取 DV 单域名免费试用证书,下载 key 私钥文件和 pem 证书文件。

步骤 2:在面板中导入证书

点击顶部导航栏的 SSL Certificates,选择 Add SSL CertificateCustom

填写自定义的证书名称,然后分别上传以下文件:

  • 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 等操作系统,广泛适用于网站发布、内网服务外网暴露、监控系统域名访问等场景,是云原生运维工具箱中值得常备的实用利器。