简介

当你需要通过 Nginx Proxy Manager(NPM)转发内网服务(如 go-music-dl)时,可以直接在 NPM 中配置 Basic Auth,让访问者在进入目标服务前先弹出登录框。本文记录了 NPM 与目标服务在不同服务器上的配置步骤。


第一步:在 NPM 所在服务器生成 htpasswd 文件

NPM 容器内使用了 Nginx,Nginx 的 Basic Auth 依赖 htpasswd 文件来存储账号密码。

# 安装工具(Debian/Ubuntu)
apt install -y apache2-utils

# 创建目录和文件
mkdir -p /opt/npm/htpasswd
htpasswd -c /opt/npm/htpasswd/musicdl admin

运行后输入你想设置的密码,完成后确认文件已生成:

cat /opt/npm/htpasswd/musicdl

第二步:确认 NPM 容器挂载了该目录

打开 NPM 的 docker-compose.yml,确保 volumes 中包含 htpasswd 目录的挂载:

volumes:
  - ./data:/data
  - /opt/npm/htpasswd:/etc/nginx/htpasswd

重启 NPM 容器使挂载生效:

docker compose down
docker compose up -d

第三步:NPM 中创建 Proxy Host

在 NPM 管理界面中:

  1. Domain Names:填入你绑定的域名或 IP
  2. Schemehttp
  3. Forward Hostname / IP:go-music-dl 所在服务器的 内网 IP(或公网 IP)
  4. Forward Port8080

保存后,编辑该 Proxy Host → 展开 Advanced(高级) → 填入以下 Nginx 配置:

location / {
    auth_basic "Music DL Login";
    auth_basic_user_file /etc/nginx/htpasswd/musicdl;
    proxy_pass http://你的music-dl_IP:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

⚠️ 你的music-dl_IP 填 go-music-dl 那台机器的 IP(如 192.168.1.100),确保两台机器的 8080 端口互通(检查防火墙/安全组)。


第四步:验证

浏览器访问 NPM 绑定的域名,会弹出账号密码框 → 输入 admin 和你设置的密码 → 成功进入 go-music-dl。