Linux 学习历程(七):反向代理神器—Nginx Proxy Manager (NPM)

前言:

在上一篇中,我们成功给 VPS 装上了 Docker,还部署了一个 Portainer 面板。现在的你,可能正对着浏览器地址栏里的 http://1.2.3.4:9000 发呆。

这串数字有三个问题:

1. 难记: 谁能记得住那么多端口号?

2. 难看: 发给朋友显得很不专业。

3. 不安全: HTTP 明文传输,密码随时可能被监听。

今天,我们要请出 Docker 界最受欢迎的“看门大爷”——Nginx Proxy Manager (NPM)

它能把复杂的反向代理配置变成简单的图形化操作,并免费帮你申请 SSL 证书(HTTPS)。从此以后,你的服务将拥有漂亮的域名和安全的小绿锁。

1. 什么是反向代理?

别被专业名词吓到了。想象一下:

  • 没有反向代理: 客人(用户)去住酒店,必须自己爬窗户进对应的房间(端口),比如爬进 9000 号房。
  • 有了反向代理: 酒店门口站了个大堂经理(NPM)。客人只要说“我要去 Portainer 厅”,经理就会优雅地把他领到 9000 号房,客人根本不需要知道房间号。

2. 准备工作

在开始之前,你需要准备两样东西:

  1. 一个域名: 如果没有,去腾讯云、阿里云或者 NameSilo 买一个便宜的(几块钱一年)。
  2. 做好解析: 去你的域名服务商后台,把域名(比如 https://www.google.com/search?q=panel.%E4%BD%A0%E7%9A%84%E5%9F%9F%E5%90%8D.com)的 A 记录解析到你 VPS 的 IP 地址。

3. 安装 Nginx Proxy Manager

还是用我们熟悉的 Docker Compose 来安装。这回我们要稍微小心一点,因为它需要占用 80 和 443 端口。

第一步:创建目录

mkdir -p ~/docker-data/npm cd ~/docker-data/npm

第二步:创建配置文件

vim docker-compose.yml

粘贴以下内容(注意:数据库密码 DB_PASSWORD 可以自己改复杂点):

version: '3' services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' # HTTP 默认端口 - '81:81' # NPM 管理后台端口 - '443:443' # HTTPS 默认端口 volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt

只要是 Docker,我就不推荐用 SQLite,还是用个正经数据库稳
db: image: 'jc21/mariadb-aria:latest' restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: 'npm' MYSQL_DATABASE: 'npm' MYSQL_USER: 'npm' MYSQL_PASSWORD: 'npm' volumes: - ./mysql:/var/lib/mysql

第三步:启动!

docker compose up -d

第四步:放行防火墙

这一步至关重要,否则外面进不来:

sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 81/tcp

4. 第一次登录与配置

打开浏览器,访问 http://你的IP:81。你会看到 NPM 的登录界面。

默认账号密码(进去后必须立刻修改):

Email: admin@example.com

Password: changeme

5. 实战:给 Portainer 加上域名和 SSL

现在我们拿上一节课装好的 Portainer 练手。假设你已经把 https://www.google.com/search?q=portainer.yourdomain.com 解析到了服务器 IP。

步骤 A:添加代理主机

  1. 点击界面上方的 Hosts -> Proxy Hosts
  2. 点击右上角的 Add Proxy Host
  3. 填写基本信息:

    Domain Names: https://www.google.com/search?q=portainer.yourdomain.com (按回车确认)


    Scheme: http


    Forward Hostname / IP: 这里的坑最大!不要填 127.0.0.1,因为 NPM 在容器里,访问不了宿主机的 127。要填 Docker 的网关 IP(通常是 172.17.0.1)或者直接填你 VPS 的公网/内网 IP。


    Forward Port: 9000


  4. Block Common Exploits 打开(多一层安全防护)。

步骤 B:申请 SSL 证书(HTTPS)

  1. 不要急着点 Save,点击上方的 SSL 标签页。
  2. SSL Certificate 下拉框中选择 Request a new SSL Certificate
  3. 打开 Force SSL(强制跳转 HTTPS)。
  4. 勾选 I Agree to the Let’s Encrypt Terms of Service
  5. 点击 Save

如果一切顺利,稍微转几圈后,列表里就会出现你的配置,并且 Status 显示为绿色。

现在,在浏览器里输入 https://portainer.yourdomain.com,看看是不是直接进去了?而且地址栏里有一个漂亮的小绿锁!


6. 避坑指南(新手必看)

  • 申请证书失败? 99% 的原因是你的域名解析还没生效,或者你填的域名是错的。先自己在电脑上 ping 一下你的域名,看能不能通。
  • 502 Bad Gateway? 这说明 NPM 连不上你的服务。检查 Forward IPPort 填对没。再次提醒,Docker 容器之间互相访问,最好不要用 localhost
  • Cloudflare 用户注意: 如果你的域名托管在 Cloudflare 并且开了“小黄云”(CDN),申请证书时可能会报错。建议先把小黄云关掉(仅 DNS 模式),申请好证书后再打开,或者在 SSL 选项里使用 DNS Challenge 模式(进阶玩法)。

7. 小结

这一篇的内容非常实战。你搭建了一个互联网的“交通枢纽”。

从此以后,你想部署什么新服务(博客、网盘、密码库),只需要两步:

1. docker compose up 跑起来。

2. 去 NPM 后台加个域名转发。

就是这么简单!

下一步预告: 基础设施(系统+Docker+NPM)全部搭建完毕!下一篇,我们终于要搭建第一个真正属于你自己的内容平台——WordPress 个人博客

博客内容均系原创,未经允许严禁转载!
您可以通过 RSS 订阅本站文章更新,订阅地址:https://blog.abco.fun
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇