4
0
0

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 两个目录一定要挂出来。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!