使用 Docker 部署 Nginx Proxy Manager:简化你的反向代理与SSL管理
在当今复杂的网络环境中,我们常常需要管理多个 Web 服务、应用或容器。如何将这些服务暴露给外部世界,同时确保安全(特别是使用 HTTPS)和易于管理,是一个常见的挑战。手动配置 Nginx 这样的高性能 Web 服务器来实现反向代理和 SSL 证书管理可能会变得非常繁琐和耗时,尤其是当服务数量增多或需要频繁修改配置时。
Nginx Proxy Manager(NPM)应运而生,它提供了一个直观的 Web 用户界面,极大地简化了 Nginx 配置、反向代理设置以及 Let’s Encrypt SSL 证书的申请和续期过程。结合 Docker 的容器化优势,部署和管理 NPM 变得前所未有的简单和高效。
本文将深入探讨为何选择 Docker 部署 Nginx Proxy Manager,详细介绍部署前的准备工作、具体的部署步骤、初始配置、核心功能的使用方法,以及一些维护和故障排除的建议。无论你是 Docker 新手还是有一定经验的用户,本文都旨在为你提供一份全面、详尽的指南。
第一部分:为什么选择 Docker 部署 Nginx Proxy Manager?
在开始部署之前,让我们先理解为什么使用 Docker 来运行 NPM 是一个极具吸引力的选择。
-
环境隔离与一致性: Docker 将应用及其所有依赖项打包在一个独立的容器中。这意味着 NPM 运行在一个标准化的、与其他系统环境隔离的环境中。你无需担心操作系统版本、库文件冲突或其他潜在的环境问题影响 NPM 的运行。无论你在哪台支持 Docker 的机器上运行同一个镜像,其行为都是一致的,这极大地提高了可靠性和可移植性。
-
简化安装与配置: 传统的软件安装可能涉及到下载安装包、处理依赖、配置环境变量等复杂步骤。使用 Docker,你只需要拉取 NPM 的官方镜像,通过简单的命令或配置文件即可启动容器。Docker Compose 更能让你用一个 YAML 文件定义和管理 NPM 及其依赖服务(如果需要,比如外部数据库),实现一键部署。
-
易于管理与维护: Docker 提供了一套标准的生命周期管理命令(启动、停止、重启、删除)。更新 NPM 就像拉取新镜像然后重启容器一样简单。如果新版本有问题,回滚到旧版本也轻而易举。
-
资源效率: 与虚拟机不同,容器共享宿主机的操作系统内核,更加轻量级,启动速度更快,占用的资源也更少。
-
可移植性与弹性: Docker 容器可以轻松地在不同的环境(开发、测试、生产)之间迁移,或者在不同的云服务商、数据中心甚至本地机器上运行。这为应用的部署和扩展提供了极大的灵活性。
-
社区支持与生态系统: NPM 提供了官方 Docker 镜像,这意味着它可以获得持续的维护和更新。Docker 社区庞大,遇到问题时很容易找到解决方案。
综上所述,使用 Docker 部署 Nginx Proxy Manager 不仅简化了部署过程,还带来了更高的可靠性、可移植性和管理便利性,让你能够更专注于管理你的 Web 服务,而不是底层基础设施的复杂性。
第二部分:部署前的准备工作
在着手部署之前,请确保你已经具备以下条件:
- 一台运行 Linux、macOS 或 Windows 的服务器或虚拟机: 宿主机需要能够运行 Docker。通常,为了长期稳定运行和对外提供服务,一个稳定的 Linux 服务器(如 Ubuntu、Debian、CentOS/Rocky Linux 等)是更常见的选择。
- 已安装 Docker 和 Docker Compose: 这是部署的基础。
- 如果未安装 Docker,请参考 Docker 官方文档进行安装:https://docs.docker.com/engine/install/
- 如果未安装 Docker Compose V2(现在通常作为 Docker CLI 的插件安装,命令是
docker compose
而非docker-compose
),请参考:https://docs.docker.com/compose/install/
- 一个或多个域名: NPM 的核心功能是为域名提供反向代理和 SSL。你需要拥有至少一个域名,并能够修改其 DNS 记录。例如,
yourdomain.com
或app.yourdomain.com
。 - 域名 DNS 记录指向你的服务器公网 IP: 确保你打算用于反向代理的域名或子域名的 A/AAAA 记录已经正确地解析到你部署 NPM 的服务器的公网 IP 地址。这是 Let’s Encrypt 验证域名所有权和用户通过域名访问你服务的必要条件。
- 服务器防火墙开放所需端口: NPM 需要监听特定的端口才能正常工作。请确保你的服务器防火墙(如
ufw
或firewalld
)以及任何云服务商的安全组/网络ACL开放以下端口:- 80 (HTTP): 用于接收 HTTP 请求,也是 Let’s Encrypt 申请证书时常用的 HTTP-01 验证方式所需的端口。
- 443 (HTTPS): 用于接收 HTTPS 请求,这是安全的 Web 通信标准端口。
- 81 (NPM Admin UI): 这是 NPM Web 管理界面的默认端口。你可以根据需要修改它,但在部署时需要确保该端口对外或至少对你管理服务器的 IP 可访问。
建议: 为了安全起见,端口 81 不建议完全对外开放给所有人。你可以配置防火墙规则,只允许你的管理 IP 地址访问端口 81。而端口 80 和 443 必须对外开放,以便公众访问你的 Web 服务。
第三部分:理解 Nginx Proxy Manager 的数据持久化
NPM 运行时会产生配置数据(如创建的反向代理记录、SSL 证书信息、用户账户等)以及 Let’s Encrypt 申请到的证书文件。这些数据默认存储在容器内部的文件系统中。但是,当容器被删除或更新时,容器内部的文件系统也会被重置,导致所有配置丢失。
为了避免数据丢失并实现数据持久化,我们需要使用 Docker 的 数据卷 (Volumes) 功能。通过将容器内部存放数据的目录映射到宿主机上的一个目录或一个具名卷,即使容器被替换,数据仍然保留在宿主机上,新的容器启动后可以继续使用这些数据。
NPM 主要需要持久化的数据有两个部分:
- 配置数据和 SQLite 数据库: NPM 默认使用一个 SQLite 数据库来存储其内部配置。这个数据库文件以及一些其他配置相关的目录位于容器内部的特定路径。
- Let’s Encrypt 证书文件: Let’s Encrypt 申请的证书文件也存储在容器内部的另一个特定路径。
在部署时,我们将为这两个部分分别创建数据卷,以确保配置和证书的安全。
第四部分:使用 Docker Compose 部署 Nginx Proxy Manager
使用 Docker Compose 是部署 NPM 最推荐的方式,因为它能用一个配置文件定义服务的所有细节,清晰且易于管理。
-
创建项目目录:
首先,在你的服务器上创建一个目录,用于存放 Docker Compose 文件和相关数据。bash
mkdir nginx-proxy-manager
cd nginx-proxy-manager -
创建
docker-compose.yml
文件:
在nginx-proxy-manager
目录下创建一个名为docker-compose.yml
的文件,并用文本编辑器打开它(例如nano docker-compose.yml
或vim docker-compose.yml
)。“`yaml
version: ‘3.8’ # 指定 Docker Compose 文件格式版本,建议使用较新版本services:
app: # 定义一个服务,命名为 app (你可以命名为 npm 或其他)
image: ‘jc21/nginx-proxy-manager:latest’ # 使用官方 Docker Hub 上的最新镜像
container_name: nginx-proxy-manager # 指定容器名称,方便管理# 重启策略:除非手动停止,否则容器总是重启 restart: unless-stopped # 端口映射:将宿主机的端口映射到容器内部的端口 # 宿主机端口:容器端口 ports: - '80:80' # HTTP 流量入口 - '443:443' # HTTPS 流量入口 - '81:81' # NPM 管理界面入口 (你可以修改宿主机的 81 端口,例如 '8181:81') # 数据卷映射:实现数据持久化 # 宿主机路径或具名卷:容器内部路径 volumes: # 存储 NPM 配置、数据库和自定义 Nginx 配置 - ./data:/data # 存储 Let's Encrypt 证书文件 - ./letsencrypt:/etc/letsencrypt # 环境变量 (可选,但建议): # 更改数据库类型和连接信息。 # 默认使用 SQLite,数据存储在 /data 卷中,无需额外数据库服务。 # 如果需要使用外部 MySQL/MariaDB,需要配置以下变量并移除 volumes 中的 ./data 部分, # 或仅保留 /etc/letsencrypt 卷并将 /data 卷用于数据库连接信息配置产生的临时文件(需要查阅NPM文档确认)。 # 对于大多数初学者,推荐使用默认的 SQLite (无需额外数据库)。 # environment: # DB_MYSQL_HOST: your_mysql_host # DB_MYSQL_PORT: 3306 # DB_MYSQL_USER: your_mysql_user # DB_MYSQL_PASSWORD: your_mysql_password # DB_MYSQL_NAME: your_mysql_database
定义具名卷 (如果上面 volumes 使用了具名卷而非目录映射,需要在此定义)
volumes:
data:
letsencrypt:
“`
-
详细解释
docker-compose.yml
配置:version: '3.8'
:指定 Docker Compose 文件格式版本。版本 3 引入了services
和networks
等概念,是当前主流版本。services:
:定义一组相关的服务。app:
:定义了一个名为app
的服务,这是我们的 NPM 容器。image: 'jc21/nginx-proxy-manager:latest'
:指定用于创建容器的镜像。jc21/nginx-proxy-manager
是 NPM 的官方 Docker Hub 镜像名称,:latest
表示使用最新版本。你也可以指定特定的版本标签(例如:2.9.19
)以锁定版本。container_name: nginx-proxy-manager
:给容器指定一个固定的名称,这样方便通过名称来引用容器(例如docker logs nginx-proxy-manager
)。restart: unless-stopped
:设置容器的重启策略。unless-stopped
意味着除非你手动执行docker compose stop
或docker container stop
命令停止容器,否则 Docker 守护进程会在容器退出时自动重启它(包括宿主机重启)。ports:
:配置端口映射。格式是宿主机端口:容器端口
。'80:80'
:将宿主机的 80 端口映射到容器内部的 80 端口。所有发送到宿主机 80 端口的流量都会转发到容器内部的 80 端口,NPM 会在这里监听 HTTP 请求。'443:443'
:将宿主机的 443 端口映射到容器内部的 443 端口。所有发送到宿主机 443 端口的流量都会转发到容器内部的 443 端口,NPM 会在这里监听 HTTPS 请求。'81:81'
:将宿主机的 81 端口映射到容器内部的 81 端口。这是 NPM Web 管理界面的默认端口。通过访问http://你的服务器IP或域名:81
来访问管理界面。你可以将宿主机的 81 端口改成其他未被占用的端口,例如'8181:81'
,这样你将通过http://你的服务器IP或域名:8181
访问管理界面。
volumes:
:配置数据卷,实现数据持久化。格式是宿主机路径或具名卷:容器内部路径
。- ./data:/data
:将宿主机当前目录下的data
子目录映射到容器内部的/data
目录。NPM 默认将 SQLite 数据库文件、配置信息、日志以及一些自定义 Nginx 配置片段存储在/data
目录中。通过这个映射,这些重要数据将保存在宿主机的data
目录中,不会随容器的删除而丢失。- ./letsencrypt:/etc/letsencrypt
:将宿主机当前目录下的letsencrypt
子目录映射到容器内部的/etc/letsencrypt
目录。Let’s Encrypt 签发的证书文件默认存储在/etc/letsencrypt
目录中。通过这个映射,你的 SSL 证书将保存在宿主机的letsencrypt
目录中。
environment:
(被注释的部分):这部分展示了如何配置 NPM 使用外部 MySQL 或 MariaDB 数据库。对于大多数入门用户,使用默认的 SQLite 数据库(由./data
卷持久化)更简单,无需配置这部分环境变量。 如果你需要管理大量代理主机或需要与其他服务共享数据库,可以考虑配置外部数据库。
-
执行部署命令:
保存docker-compose.yml
文件后,在同一个目录下打开终端,运行以下命令启动容器:bash
docker compose up -ddocker compose up
: 根据docker-compose.yml
文件创建并启动服务定义的容器。-d
: 后台模式运行(detached mode),容器将在后台运行,不会阻塞当前终端。
首次运行此命令时,Docker 会自动从 Docker Hub 拉取
jc21/nginx-proxy-manager:latest
镜像(如果本地没有的话),然后创建并启动nginx-proxy-manager
容器。同时,Docker 会自动创建data
和letsencrypt
这两个目录(如果它们不存在的话)在你的宿主机当前目录下。 -
验证部署:
容器启动后,你可以使用以下命令检查其状态:bash
docker compose ps你应该能看到
nginx-proxy-manager
容器的状态是running
。你也可以查看容器的日志输出,以便排查潜在问题:
bash
docker compose logs nginx-proxy-manager或者
bash
docker logs nginx-proxy-manager检查日志中是否有错误信息。
第五部分:首次访问和初始配置
容器成功启动后,你可以通过 Web 浏览器访问 NPM 的管理界面进行配置。
-
访问管理界面:
打开你的 Web 浏览器,访问:http://你的服务器IP地址或解析到服务器的域名:81
例如,如果你的服务器 IP 是
192.168.1.100
,并且你在docker-compose.yml
中将 81 端口映射为宿主机的 81 端口,那么访问地址就是http://192.168.1.100:81
。 -
默认登录凭据:
首次访问时,系统会要求你输入用户名和密码。默认的登录凭据是:- Username:
[email protected]
- Password:
changeme
重要: 登录后,系统会立即提示你修改默认的邮箱和密码。请务必立即修改为强密码和你的常用邮箱,以保障安全。
- Username:
-
修改默认用户:
登录后,NPM 会引导你进行初始设置:- 首先,更改你的用户名(Name)和管理员邮箱(Email Address)。
- 然后,设置一个新的安全密码(Password)。
- 点击 “Save” 完成修改。你需要使用新的邮箱和密码重新登录。
至此,你已经成功部署了 Nginx Proxy Manager,并完成了初始管理员账户的安全设置。
第六部分:使用 Nginx Proxy Manager 创建反向代理主机
现在 NPM 已经准备就绪,最核心的功能就是创建反向代理主机(Proxy Hosts)。反向代理的作用是将来自公网特定域名(或子域名)的请求转发到你的内部网络中运行的实际服务(例如一个 Web 服务器、一个应用容器等)的 IP 地址和端口上。
以代理一个运行在服务器内部 IP 地址 192.168.1.100
的 8080 端口上的 Web 服务(例如 Portainer、Jenkins 或你自己开发的 Web 应用)到公网域名 app.yourdomain.com
为例。
- 登录 NPM 管理界面。
- 导航到 “Hosts” -> “Proxy Hosts”。
- 点击 “Add Proxy Host”。
-
在弹出的窗口中填写信息:
- Domain Names: 输入你想要代理的公网域名。对于我们的例子,输入
app.yourdomain.com
。你可以输入多个域名,用逗号分隔。 - Scheme: 选择代理协议。通常是
http
或https
。如果你的内部服务监听的是 HTTP,就选http
。 - Forward Hostname / IP: 输入内部服务的 IP 地址或主机名。对于我们的例子,输入
192.168.1.100
。如果你要代理的是同一 Docker 网络内的另一个容器,这里可以直接使用容器的服务名称或容器名称(前提是它们在同一个 Docker 网络中)。 - Forward Port: 输入内部服务监听的端口号。对于我们的例子,输入
8080
。 - Block Exploits: 建议勾选此项,以阻止一些常见的 Web 攻击。
- Websockets Support: 如果你的内部服务使用 WebSocket(例如终端、聊天应用等),需要勾选此项。
- Domain Names: 输入你想要代理的公网域名。对于我们的例子,输入
-
SSL 配置(获取 Let’s Encrypt 证书):
这是 NPM 的亮点功能。切换到 “SSL” 标签页。- SSL Certificate: 选择
<None>
。 - 点击 “Request a new SSL Certificate”。
- Force SSL: 勾选此项,这将自动将所有 HTTP 请求重定向到 HTTPS。
- HSTS Enabled: (可选,但推荐)勾选此项并设置 HSTS Maximum Age。HSTS (HTTP Strict Transport Security) 告诉浏览器在指定时间内只能通过 HTTPS 访问你的网站,提高安全性。建议设置为 6 months 或 1 year (填入对应的秒数)。
- HTTP/2 Support: (可选)勾选此项以启用 HTTP/2,提高网页加载速度。
- Email Address for Let’s Encrypt: 输入你的邮箱地址,用于接收 Let’s Encrypt 的通知(如证书即将过期)。
- I Agree to the Let’s Encrypt Terms of Service: 必须勾选此项。 这表示你同意 Let’s Encrypt 的服务条款。
- Propagate Certificates to Cluster: (如果你使用 NPM 集群部署才需要)
- DNS Challenge: (高级用户,如果 HTTP-01 验证不行或需要泛域名证书)如果你需要使用 DNS 验证(例如因为你的服务器没有公网 IP,或者你需要申请泛域名证书如
*.yourdomain.com
),你需要在 “Advanced” 标签页配置 DNS Provider API 凭据。对于标准的单一域名且端口 80 对外开放的情况,HTTP-01 验证(默认方式,无需额外配置)是最简单的。
- SSL Certificate: 选择
-
Advanced 配置(可选):
- Custom Nginx Configuration: 允许你插入自定义的 Nginx 配置片段到当前代理主机的配置中。适合有 Nginx 配置经验的用户进行高级调整。
-
点击 “Save”。
NPM 将尝试连接到 Let’s Encrypt 服务器,并通过 HTTP-01 方式验证你的域名所有权(Let’s Encrypt 服务器会尝试通过 HTTP 访问 http://你的域名/.well-known/acme-challenge/...
,而 NPM 会在接收到这个请求时自动响应)。如果验证成功,Let’s Encrypt 将签发证书,NPM 会自动下载、安装并配置 Nginx 使用该证书。
如果一切顺利,你应该会看到新的代理主机出现在列表中,并且 SSL 证书状态显示为绿色(表示证书已成功获取并生效)。
现在,通过浏览器访问 https://app.yourdomain.com
,你的请求就会被 NPM 接收,自动转发到你的内部服务 192.168.1.100:8080
,并且通信过程使用 HTTPS 加密。NPM 还会负责在证书即将过期时自动进行续期。
第七部分:更多 Nginx Proxy Manager 的功能探索
除了基本的反向代理和 SSL 证书管理,NPM 还提供了许多其他有用的功能:
- Redirection Hosts (重定向主机): 创建一个主机将某个域名重定向到另一个 URL。例如,将
olddomain.com
重定向到newdomain.com
。 - Stream Hosts (流主机): 代理非 HTTP/HTTPS 的 TCP/UDP 流量。例如,代理 SSH、RDP 或数据库连接。
- Access Lists (访问列表): 定义允许或拒绝访问某个代理主机的 IP 地址或 IP 范围。你可以创建不同的访问列表并在不同的代理主机上应用。
- Users (用户管理): 添加其他用户来管理 NPM,并可以分配不同的角色和权限。
- Settings (设置): 配置 NPM 的全局选项,如日志设置、证书设置、高级 Nginx 配置等。
- SSL Certificates (SSL 证书管理): 查看、导入、导出或删除 SSL 证书。除了 Let’s Encrypt 证书,你也可以导入自己的证书(例如从其他 CA 购买的证书)。
- Custom Configurations (自定义配置): 允许你上传自定义的 Nginx 配置文件片段,并在代理主机或全局范围内引用。这为你提供了极大的灵活性来满足特定的 Nginx 配置需求。
花时间浏览和试验这些功能,它们可以帮助你更精细地控制流量和提高安全性。
第八部分:维护和管理
Docker 部署使得 NPM 的维护和管理相对简单。
-
更新 NPM:
当 NPM 发布新版本时,你可以通过 Docker Compose 轻松更新:“`bash
进入 docker-compose.yml 文件所在的目录
cd /path/to/nginx-proxy-manager
拉取最新镜像
docker compose pull app
停止并重建容器(使用新镜像)
docker compose up -d –force-recreate app
“`docker compose pull app
会从 Docker Hub 下载最新版本的 NPM 镜像。docker compose up -d --force-recreate app
会停止当前运行的app
容器,使用新拉取的镜像创建一个新的容器,并以后台模式启动它。由于你使用了数据卷,所有的配置和证书都会被新的容器自动继承。 -
备份配置和证书:
你的所有重要数据都存储在宿主机映射的./data
和./letsencrypt
目录中。备份 NPM 配置和证书的最简单方法就是定期备份这两个目录。“`bash
进入 docker-compose.yml 文件所在的目录
cd /path/to/nginx-proxy-manager
压缩备份
tar -czvf npm_backup_$(date +%F).tar.gz data letsencrypt
“`然后将生成的
npm_backup_YYYY-MM-DD.tar.gz
文件复制到安全的地方(例如云存储、另一台服务器等)。恢复时,只需将备份文件解压到新的或现有的 NPM 项目目录下,然后运行
docker compose up -d
即可。 -
查看日志:
当你遇到问题时,查看容器日志是排查问题的首要步骤:“`bash
docker compose logs nginx-proxy-manager或查看最近的日志
docker compose logs –tail 100 nginx-proxy-manager
“` -
停止/启动容器:
bash
docker compose stop nginx-proxy-manager
docker compose start nginx-proxy-manager
第九部分:常见问题与故障排除
部署和使用过程中可能会遇到一些问题,以下是一些常见情况和排查思路:
-
无法访问 NPM 管理界面 (端口 81):
- 检查容器状态: 确保
nginx-proxy-manager
容器正在运行 (docker compose ps
)。 - 检查端口映射: 确认
docker-compose.yml
中的 81 端口映射是否正确,以及你是否使用了正确的宿主机端口访问。 - 检查宿主机防火墙: 确保宿主机的防火墙(如
ufw
或firewalld
)允许来自你的 IP 地址访问端口 81。 - 检查云服务商安全组/网络ACL: 如果部署在云服务器上,检查相应的安全组或网络ACL是否允许端口 81 的入站连接。
- 检查日志: 查看容器日志 (
docker compose logs nginx-proxy-manager
) 是否有启动错误。
- 检查容器状态: 确保
-
无法通过域名访问已配置的代理主机 (端口 80/443):
- 检查容器状态: 确保容器正在运行。
- 检查端口映射: 确认
docker-compose.yml
中的 80 和 443 端口映射是否正确。 - 检查宿主机防火墙: 确保宿主机的防火墙允许端口 80 和 443 的入站连接。
- 检查云服务商安全组/网络ACL: 确保相应的安全组或网络ACL允许端口 80 和 443 的入站连接。
- 检查 DNS 解析: 在你的电脑上使用
ping yourdomain.com
或nslookup yourdomain.com
命令,确保你的域名正确解析到了部署 NPM 的服务器的公网 IP 地址。DNS 记录可能需要一些时间(几分钟到几小时,取决于 TTL 设置)才能全球生效。 - 检查 NPM 配置: 登录 NPM 管理界面,检查你创建的 Proxy Host 配置是否正确,包括域名、转发地址和端口。确保 Proxy Host 是 “Enabled” 状态。
- 检查内部服务: 确保你的内部服务(如运行在 192.168.1.100:8080 的服务)本身正在运行,并且可以从部署 NPM 的服务器内部访问(例如使用
curl http://192.168.1.100:8080
在服务器上测试)。 - 检查日志: 查看 NPM 容器日志是否有关于该域名访问的错误或转发失败的信息。
-
Let’s Encrypt 证书申请失败:
- 检查域名解析: 确保你的域名在公网上已经正确解析到你的服务器 IP。Let’s Encrypt 验证时,是从公网访问你的域名。
- 检查端口 80/443 是否开放: Let’s Encrypt 通常使用 HTTP-01 验证,这意味着它需要通过公网访问你的域名的 80 端口来获取一个验证文件。如果你的 80 端口被防火墙阻止或被其他服务占用,验证就会失败。确保 80 端口对公网是可访问的,并且流量可以到达 NPM 容器的 80 端口。
- 检查 NPM 配置: 确认在 SSL 标签页中输入的域名、邮箱地址正确,并且同意了服务条款。
- 检查 Let’s Encrypt 速率限制: 如果你频繁尝试申请证书,可能会达到 Let’s Encrypt 的速率限制。通常每周每个主域名(以及其子域名)有 50 个证书的限制。等待一段时间再尝试。
- 检查日志: 查看 NPM 容器日志,Let’s Encrypt 的详细错误信息通常会在日志中显示。
-
内部服务使用了 HTTPS,如何代理?
如果你的内部服务本身就提供了 HTTPS (例如一个带有自签名证书的服务),在 NPM 中创建 Proxy Host 时:- Scheme 选择
https
。 - Forward Port 填写内部服务的 HTTPS 端口 (通常是 443 或其他)。
- 重要: 在 Advanced 标签页,通常需要勾选
Ignore SSL Errors
或类似选项 (具体名称可能因版本略有差异),因为 NPM 作为客户端去访问内部服务时,如果内部服务的证书是自签名或不被信任的,会导致连接失败。或者,更好的做法是配置内部服务使用一个有效的证书(可以是内网 CA 签发的,或者干脆让 NPM 只代理 HTTP,而内部服务监听 HTTP 端口)。最推荐的方式是让 NPM 负责外部的 HTTPS (使用 Let’s Encrypt),而内部服务监听 HTTP 端口,NPM 通过 HTTP 转发到内部服务。这样可以减轻内部服务的配置负担,也避免了内部服务证书不受信任的问题。
- Scheme 选择
第十部分:总结
Nginx Proxy Manager 是一个强大且易于使用的工具,它将复杂的 Nginx 配置和 Let’s Encrypt 证书管理过程抽象为一个直观的 Web 界面。通过结合 Docker 进行部署,我们获得了环境隔离、简化安装、易于管理和数据持久化等多重优势。
本文详细介绍了使用 Docker Compose 部署 NPM 的全过程,从准备工作、docker-compose.yml
文件编写及解释,到容器的启动和验证,再到首次访问和初始配置。我们还深入讲解了如何利用 NPM 的核心功能——创建反向代理主机并自动获取和管理 Let’s Encrypt SSL 证书。最后,我们探讨了 NPM 的其他有用功能、维护管理以及常见的故障排除方法。
通过遵循本文的步骤,你应该能够成功地在你的服务器上部署 Nginx Proxy Manager,并开始利用它来简化你的 Web 服务发布和管理工作。记住,安全是持续的过程,除了配置好 NPM 和防火墙,也要定期更新 NPM 镜像,并备份重要数据。
希望这篇文章对你有所帮助!祝你使用 Nginx Proxy Manager 愉快!