本文可能包含联盟营销链接——通过我们的链接注册时,我们可能获得佣金,但不会增加您的费用。| 编辑政策
Nginx Proxy Manager on VPS

VPS指南 · 自托管

Nginx Proxy Manager 完整安装与配置指南 2026

作者:CloudPicked编辑团队 · 最后更新:2026年10月

如果您在VPS上运行多个服务——博客、Nextcloud、Git服务器或个人仪表板——您可能面临如何将多个子域名路由到不同内部端口的挑战。Nginx Proxy Manager(NPM)优雅地解决了这个问题:一个基于Docker的反向代理,拥有精美的Web界面和来自Let's Encrypt的免费自动SSL。

本指南涵盖从新VPS安装到高级功能(访问列表、HTTP身份验证和Docker网络配置)的完整内容。所有信息均来自NPM官方文档(nginxproxymanager.com,版本2.16.0,2026年10月)。

目录

  1. 什么是Nginx Proxy Manager?
  2. 主要功能与优势
  3. 系统要求
  4. 步骤1 — 安装Docker
  5. 步骤2 — 用Docker Compose安装NPM
  6. 步骤3 — 首次登录与初始设置
  7. 步骤4 — 创建第一个代理主机
  8. 步骤5 — 配置SSL证书
  9. 设置重定向
  10. 访问列表与HTTP认证
  11. Docker网络最佳实践
  12. 常见问题排查
  13. 常见问题解答

什么是Nginx Proxy Manager?

Nginx Proxy Manager(NPM)是由Jamie Curnow(GitHub用户名:jc21)创建的开源Docker镜像。它提供了一个简洁的Web界面来管理Nginx反向代理,无需手动编写和维护Nginx配置文件。

反向代理位于后端服务前面,根据主机名将传入的HTTP/HTTPS请求路由到适当的服务。NPM通过管理仪表板的几次点击处理所有复杂工作——SSL终止、证书续期、请求头转发和WebSocket代理。

"它必须简单到猴子都能做到。" —— NPM创建者Jamie Curnow

主要功能与优势

功能NPMTraefikCaddy
Web界面完整功能基础无(仅配置文件)
自动SSL是是是
Docker原生是是支持
最适合自托管用户K8s/微服务代码即配置
学习难度低中高中

数据截至2026年10月 — 请在各项目官网核实最新功能

系统要求

安装NPM前,请确保您的VPS满足以下要求:

注意:对于在东南亚需要低延迟访问的场景,建议选择在新加坡或泰国有服务器的提供商,如AsiaGB、Bangmod Cloud或DigitalOcean新加坡区域。

步骤1 — 在Ubuntu上安装Docker

通过SSH连接到您的VPS,运行以下命令(已在Ubuntu 22.04和24.04上测试):

# 更新软件包列表
sudo apt update && sudo apt upgrade -y

# 安装依赖
sudo apt install -y ca-certificates curl gnupg

# 添加Docker的GPG密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 添加Docker软件源
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker Engine和Compose插件
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 将当前用户添加到docker组
sudo usermod -aG docker $USER
newgrp docker

验证安装:

docker --version
docker compose version

步骤2 — 使用Docker Compose安装Nginx Proxy Manager

创建NPM目录并编写docker-compose.yml文件:

mkdir ~/nginx-proxy-manager && cd ~/nginx-proxy-manager
nano docker-compose.yml

粘贴以下配置:

services:
  app:
    image: 'docker.io/jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'    # HTTP流量
      - '81:81'    # 管理界面
      - '443:443'  # HTTPS流量
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

保存文件后启动NPM:

docker compose up -d

验证容器正在运行:

docker compose ps

应该看到容器状态为Up,并且端口80、81和443已绑定。

防火墙:如果使用UFW,请先允许所需端口:sudo ufw allow 80,81,443/tcp && sudo ufw reload

步骤3 — 首次登录与初始设置

打开浏览器,访问http://<您的VPS-IP>:81(例如http://123.45.67.89:81)

使用默认凭据登录:

NPM将立即提示您更改邮箱地址和密码。请立即执行——切勿在生产环境中保留默认凭据。

仪表板概览

登录后,主仪表板显示以下计数器:

步骤4 — 创建第一个代理主机

假设您有一个运行在localhost:3000的服务(例如Gitea、Vaultwarden或Node.js应用),想通过app.example.com访问它。

  1. 进入Hosts → Proxy Hosts
  2. 点击"Add Proxy Host"
  3. 填写Details选项卡:
    • Domain Names:app.example.com
    • Scheme:http
    • Forward Hostname/IP:localhost(若使用Docker网络则填容器名)
    • Forward Port:3000
    • 启用"Block Common Exploits"
    • 若应用使用WebSocket,启用"Websockets Support"
  4. 点击"Save"

步骤5 — 配置Let's Encrypt免费SSL证书

为代理主机添加HTTPS:

  1. 编辑代理主机 → 点击"SSL"选项卡
  2. 在SSL Certificate下,选择"Request a new SSL Certificate"
  3. 启用"Force SSL" — 自动将HTTP流量重定向到HTTPS
  4. 启用"HTTP/2 Support"
  5. 输入邮箱地址用于Let's Encrypt通知
  6. 同意Let's Encrypt服务条款
  7. 点击"Save"

NPM将通过HTTP-01验证联系Let's Encrypt,获取有效期90天的证书,并在到期前自动续期。

重要:域名的A记录必须已指向VPS IP,且端口80必须可从互联网访问。Let's Encrypt使用HTTP-01验证来确认域名所有权。

设置重定向主机

使用重定向主机将一个域名转发到另一个——例如www.example.com → example.com:

  1. 进入Hosts → Redirection Hosts
  2. 点击"Add Redirection Host"
  3. Domain Names:www.example.com
  4. Forward Domain Name:example.com
  5. HTTP Code:301(永久)或302(临时)
  6. 按需启用SSL,然后"Save"

访问列表与HTTP基本认证

访问列表通过IP地址或用户名/密码限制对代理主机的访问。

创建访问列表

  1. 进入Access Lists → Add Access List
  2. 输入描述性名称(如"仅管理员")
  3. 在Authorization选项卡中:添加HTTP基本认证的用户名/密码对
  4. 在Access选项卡中:添加允许或拒绝的IP地址
  5. 保存,然后通过代理主机的Details选项卡分配此访问列表

NPM适合谁?

NPM是自托管爱好者和家庭实验室用户的理想选择,无需编写任何Nginx配置文件,即可在单台VPS上运行多个服务,实现干净的域名路由和自动SSL。

Docker网络最佳实践

当多个服务在Docker容器中运行时,使用共享网络可以让NPM通过容器名而非localhost与它们通信。

创建共享网络:

docker network create proxy_net

更新NPM的docker-compose.yml:

services:
  app:
    image: 'docker.io/jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - proxy_net

networks:
  proxy_net:
    external: true

对于每个后端服务,在其docker-compose.yml中加入相同网络,然后在NPM代理主机配置中使用容器的服务名作为Forward Hostname。

常见问题排查

SSL证书申请失败

502 Bad Gateway错误

更新NPM至最新版本

docker compose pull
docker compose up -d

需要适合运行NPM的VPS?

我们推荐在亚洲有服务器的VPS提供商,以获得低延迟和稳定的正常运行时间。

查看AsiaGB VPS   查看Bangmod Cloud

常见问题解答

Nginx Proxy Manager是免费的吗?

是的。NPM是MIT许可证下的开源软件,个人和商业使用完全免费。Docker镜像可从Docker Hub下载,镜像名为jc21/nginx-proxy-manager。

NPM能申请通配符SSL证书吗?

可以,但需要使用DNS Challenge而非默认的HTTP-01验证。您需要在SSL选项卡中选择DNS提供商(Cloudflare、Route53等)并提供API凭据。

NPM使用什么数据库?

默认情况下,NPM使用存储在./data卷中的内置SQLite数据库。对于较大规模的部署,也支持MySQL/MariaDB。对于大多数自托管用例,SQLite已经足够。

NPM支持armv7(树莓派)吗?

NPM 2.14+版本已放弃armv7支持(因为Node.js放弃了armhf支持)。如果您使用旧版树莓派,请在docker-compose.yml中明确指定镜像标签2.13.7。

应该将81端口(管理界面)暴露到互联网吗?

不应该。最佳实践是关闭外部对81端口的访问(sudo ufw delete allow 81/tcp),通过SSH隧道或VPN访问管理界面,以获得最高安全性。

总结

Nginx Proxy Manager(v2.16.0,2026年10月)是自托管用户的最佳反向代理解决方案,无需手动编写Nginx配置即可实现干净的域名路由和自动SSL。精美的Web界面、零配置的Let's Encrypt集成以及活跃的社区,使其成为从单台VPS暴露多个服务的最简单途径。

其主要局限性在于不适合代码即配置或Kubernetes环境——在这些场景中,Traefik或Nginx Ingress Controller是更好的选择。但对于个人服务器、家庭实验室和小型团队基础设施,NPM很难被超越。