Nginx Proxy Manager 部署
📝 笔记摘要:Nginx Proxy Manager 部署
1.它是什么:
带 Web 界面的 nginx 管理面板,底层跑的还是 nginx
反向代理、SSL 证书签发和续期、Docker 容器联动,界面上点一下就完
适合不想手写 conf,或者要给多个人管站点的情况
长得像 NGINX Plus 那套,但不要钱,官方定位是个人和小团队
2.部署:
docker-compose.yml:
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
docker-compose up -d
docker-compose logs -f
提示:
81是管理界面端口,和站点本身无关。云服务器上 81 没放行的话,本地浏览器访问不了面板。
笔记里存了两份 compose,一份带独立的 mariadb 容器和 DB_MYSQL_* 环境变量,一份不带。新装的用不带的那份,官方镜像已经不需要额外数据库了。老的那份留着是为了对照,真要跑起来记得把 db 密码也改掉:
旧版还需要
depends_on: [db]和DB_MYSQL_HOST/PORT/USER/PASSWORD/NAME五项
IPv6 没开的机器加一行DISABLE_IPV6: 'true'
MySQL 的 root 密码默认也是npm,别带到公网上
3.初始账号:
Email: admin@example.com
Password: changeme
注意:第一次登录会强制改密码。改完之后用默认密码就进不去了,这一步不能跳。
4.建第一个代理:
Proxy Hosts 页面 → 右上角 Add Proxy Host
Domain Names —— 填域名,多个就分行填;要带端口写成host:port
Scheme —— 源站是 http 还是 https
Forward Hostname / IP —— 项目跑在 docker 里就填容器名,本机服务填宿主机地址,比如172.17.0.1
Forward Port —— 项目自己的端口
Websockets Support —— 前端要连 ws 就打开,不开长连接会被断
Block Common Exploits —— 默认开着,一般别关
提示:填容器名最省事,容器重启换 IP 也不用改配置。填
127.0.0.1是最常见的坑,面板跑在容器里,那个 127.0.0.1 指的是容器自己,不是宿主机。
5.DNS 解析:
多个域名可以都解析到同一台云服务器的 IP,DNS 加一条 A 记录指到服务器公网 IP 就行
解析生效之后回面板建 Proxy Host,顺序不能反
解析没生效的表现是域名打得开但面板里显示 Offline
6.面板和手写 conf 怎么选:
面板:省事,证书自动续,多人协作方便;缺点是能配的就那些,冷门需求还得 SSH 上去补
手写 conf:什么都能干;缺点是改一次 reload 一次,多台机器同步也麻烦
混合最常见:面板管域名和证书,复杂 location 用 SSH 手写,两者不冲突
💡 补充几个原文没写的:
两个目录必须挂出来。
./data是数据库和配置,./letsencrypt是证书。不挂出来容器一重建全没了。别用
docker compose down -v。 那个-v会把卷一起删掉,数据和证书一起没。
latest会跟着上游动。 重要环境把版本号写死,出问题好回滚。面板改完不生效,先看
docker-compose logs,再 SSH 进去nginx -t定位。探针和监控脚本别贴进公开笔记。 这类一键脚本里常带着自己的 IP 和 token,贴出去等于把面板地址和凭据一起送人。
🔥 一句话总结:面板负责域名、DNS 对接和证书自动续,复杂需求还是 SSH 手写 conf,data 和 letsencrypt 两个目录一定要挂出来。
