Nginx 代理管理器安装 - 2 分钟设置指南
您的服务当前位于丑陋的地址,例如 192.168.1.50:8080。 Nginx 代理管理器将它们转换为干净的名称,例如带有免费 HTTPS 的 app.yourdomain.com - 使用一个 Docker Compose 文件安装,并通过一个简单的 Web 面板(而不是手写的配置文件)进行管理。
📑章节
- 反向代理的作用 - 一扇门为您提供所有服务
- 开始之前需要什么 - Docker、域和可访问端口
- 在安装任何内容之前将您的域 DNS 指向服务器
- 创建文件夹和 docker-compose.yml 文件
- 通过一个命令启动 Nginx 代理管理器
- 首次登录 - 每个人都会犯错的管理员帐户步骤
- 逐个字段创建您的第一个代理主机
- 获取免费的 Lets Encrypt HTTPS 证书并启用强制 SSL
📋 概述和分步指南
开始之前您需要什么
Nginx 代理管理器 (NPM) 可以工作之前必须存在三件事。首先,已安装并运行 Docker 和 Docker Compose 的 Linux 服务器或 PC - NPM 作为容器运行,而不是作为普通程序运行。其次,您可以编辑其 DNS 的域名,因为每个服务都有自己的子域。第三,您的路由器或云防火墙必须能够将端口 80 和 443 转发到这台机器。
首先将您的域名 DNS 指向服务器
NPM 按名称路由流量,而 Lets Encrypt 仅针对可证明指向您的计算机的名称颁发证书 - 因此在您在其上构建任何内容之前必须解析该名称。在您的注册商或 DNS 主机处,添加 A 记录:名称仅为子域单词(例如 app),值是您服务器的公共 IP 地址。每个服务都有自己的记录,并且它们都可以指向同一个 IP - NPM 稍后按名称分隔服务。在测试时设置较短的 TTL(例如 300 秒),这样错误会在几分钟而不是几小时内消失。
在继续之前先证明这一点:检查名称是否从外部网络解析为您的公共 IP(例如,从关闭 Wi-Fi 的手机)。针对损坏的 DNS 请求证书会浪费 Let's Encrypt 尝试,并且重复失败可能会限制您数小时的速率。顺序很重要:DNS 第一,代理主机第二,证书第三。
创建文件夹和撰写文件
在服务器上为 NPM 创建一个文件夹,并将以下文件保存在其中:docker-compose.yml。这个单个文件就是完整的安装。镜像名称为官方社区镜像。端口 80 和 443 是公共门,端口 81 是管理面板,这两个卷是您的整个设置所在的位置:./data 保存包含所有代理主机的数据库,./letsencrypt 保存您的证书。丢失这两个文件夹就会丢失整个设置 - 一旦运行就备份它们。
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '81:81'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
restart:unless-stopped 行在重新启动后自动恢复 NPM。
启动 Nginx 代理管理器
从该文件夹内运行启动命令。 Docker 下载镜像并在后台启动容器。
docker compose up -d
检查它是否正在运行:
docker ps
您应该看到列出了端口 80、443 和 81 的容器。在小型服务器上,创建数据库时第一次启动需要一两分钟。如果容器不断重新启动,日志会以简单的语言显示原因:
docker compose logs
重启循环十分之九是主机上的其他设备已使用的端口 - 通常是仍在运行的旧 Web 服务器。
首次登录 - 立即保护管理员帐户
在您自己网络上的浏览器中打开管理面板:
http://your-server-ip:81
在第一分钟内执行此操作。根据构建的不同,NPM 要么要求您用自己的电子邮件和强密码替换众所周知的首次登录管理员详细信息,要么在没有默认帐户的较新构建上,第一个打开管理页面的人创建管理员。无论哪种方式,规则都是相同的:在容器启动时、创建其他任何内容之前设置您自己的管理员帐户,并使用真实的邮箱 - 用于解决证书问题的 NPM 电子邮件。
创建您的第一个代理主机
在 NPM 中,打开主机 → 代理主机 → 添加代理主机,然后将表单填写为一句话 - “此名称将转到该内部服务”:
域名: app.yourdomain.com - 第 2 步中的确切公开名称,必须已解析为您的服务器。
方案: http 适用于大多数家庭和办公室应用程序。方案描述了 NPM 和内部服务之间的连接,而不是访问者使用的内容 - NPM 在门口处理公共加密。仅当内部应用本身提供 HTTPS 服务时,才在此处选择 https。
转发主机名/IP:服务的内部地址,例如192.168.1.50。
转发端口:服务实际侦听的端口,例如8080 - 而不是 80 或 443;这些是 NPM 的门,而不是服务的门。
启用阻止常见漏洞,然后保存。通过在浏览器中打开该名称立即进行测试 - 最好在 Wi-Fi 关闭的情况下通过手机打开,这样您就可以测试真实的公共路径。
localhost 是错误的(在 NPM 的容器内,localhost 表示 NPM 本身) - 使用服务器的 LAN IP 和已发布的端口,或者将两个容器放在同一个 Docker 网络上并使用容器名称。获取免费的 Lets Encrypt HTTPS 证书
仅在步骤 6 中的普通主机已经工作后才执行此操作 - 损坏主机上的 HTTPS 为您提供带有证书的损坏主机,以及查找故障的两倍位置。打开同一代理主机,转到SSL选项卡,将SSL证书设置为请求新的SSL证书,启用强制SSL和HTTP/2支持,同意Lets Encrypt服务条款,然后保存。重新加载网站 - 浏览器现在应该在 https 上显示挂锁。
工作原理:Lets Encrypt 通过在端口 80 上的公共互联网上要求服务器显示一次性令牌(HTTP-01 质询)来证明您可以控制名称。这就是为什么指向您的 DNS 和可到达的端口 80 是不可协商的 - 任何一个失败,请求都会失败,并且错误出现在设置中,而不是出现在 Lets Encrypt 中。 强制 SSL 自动将每个 http 访问者重定向到 https;如果没有它,未加密的门将在加密的门旁边保持打开状态。
🏷️主题搜索变量和关键字
🎙️ 完整文字记录 — 点击展开
__TOK_34__
__TOK_35__
__TOK_36__
❓ 常见问题
本教程是 100% 免费学习的吗?
__TOK_37__
初学者可以遵循本指南吗?
__TOK_38__
如果遇到困难我可以在哪里提问?
__TOK_39__