简介
Nginx Proxy Manager 是一个基于 Docker 的工具,提供简单而强大的界面来管理 Nginx 代理主机。它允许用户轻松配置反向代理、SSL证书和访问控制,使得管理网站和在线服务的代理变得更加便捷。这个开源项目特别适合那些寻找直观、高效代理管理解决方案的用户,无论是新手还是经验丰富的开发者。
本文写于 2024-01-27,当你看到时可能一些地方已经过期。
搭建
环境准备
- 服务器:轻量服务器即可
- 系统:Docker 环境(例如:【好玩的 Docker 项目】Debian 11 搭建 Docker 环境)
- 域名:购买域名或用IP
- 证书:
- 购买或云服务商提供或
acme.sh
或祖龙提到的 zerossl - 使用 npm 自带添加 Let’s Encrypt 证书功能
- 购买或云服务商提供或
目录结构
└─docker_fun
└─npm
├─app
│ ├─db_root_pwd.txt
│ └─mysql_pwd.txt
├─docker-compose.yml
├─vols
│ ├─cert
│ ├─data
│ └─db_data
Docker,启动!
进入 docker-compose.yml
所在目录执行
docker compose up -d
附一份简单的 docker-compose.yml
version: "3.9"
secrets:
# Secrets 配置是单行文本文件,其中唯一的内容就是密码
# 本例中的路径假定数据库密码保存在名为"./app"的本地文件夹中
DB_ROOT_PWD:
file: ./app/db_root_pwd.txt
MYSQL_PWD:
file: ./app/mysql_pwd.txt
services:
nginx-app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-app
restart: unless-stopped
ports:
# HTTP 端口(左边为对外暴露的端口):
- '80:80'
# HTTPS 端口(左边为对外暴露的端口):
- '443:443'
# 后台管理端口(左边为对外暴露的端口):
- '<YOUR_ADMIN_PORT>:81'
environment:
### 以下是访问数据库的设置
# 数据库主机,同下面配置的 nginx-db(docker 中同一 networks 配置下直接用别名)
DB_MYSQL_HOST: "nginx-db"
# 数据库端口
DB_MYSQL_PORT: 3306
# 数据库用户
DB_MYSQL_USER: "pandoranext"
# DB_MYSQL_PASSWORD: "pandoranext" # 如果没有配置 MYSQL_PWD,则在配置文件中直接填密码,不是很安全
DB_MYSQL_PASSWORD__FILE: /run/secrets/MYSQL_PWD
DB_MYSQL_NAME: "pandoranext"
# 如果您更愿意使用 Sqlite,请取消注释下面这行,并删除上面所有 DB_MYSQL_* 行
# DB_SQLITE_FILE: "/data/database.sqlite"
### 其他设置
# 如果主机未启用 IPv6,请取消此处的注释
# DISABLE_IPV6: 'true'
# 时区设置
TZ: "Asia/Shanghai"
volumes:
# 同步主机时间
# - /etc/localtime:/etc/localtime:ro
# npm 的数据存储位置
- ./vols/data:/data
# letsencrypt 证书位置
- ./vols/cert:/etc/letsencrypt
secrets:
# 如果使用密码文件,则需要在这里配置变量
- MYSQL_PWD
depends_on:
# 配置启动顺序,在 nginx-db 之后启动
- nginx-db
networks:
- pandora-next
nginx-db:
image: jc21/mariadb-aria
container_name: nginx-db
restart: unless-stopped
environment:
# MYSQL_ROOT_PASSWORD: "npm" # use secret instead
MYSQL_ROOT_PASSWORD__FILE: /run/secrets/DB_ROOT_PWD
MYSQL_DATABASE: "npm"
MYSQL_USER: "npm"
# MYSQL_PASSWORD: "npm" # use secret instead
MYSQL_PASSWORD__FILE: /run/secrets/MYSQL_PWD
TZ: "Asia/Shanghai"
volumes:
- ./vols/db_data/mysql:/var/lib/mysql
secrets:
- DB_ROOT_PWD
- MYSQL_PWD
networks:
- pandora-next
networks:
pandora-next:
# 网络名称
name: pandora-next
driver: bridge
配置 ssl 证书
- 点击添加证书按钮,选择 Let’s Encrypt。如果你有自己的证书可以选择 custom 上传
- 配置参数
Domain Names
:这里申请的是泛域名,所以用了*.<domain>
,这样不用为每个Proxy Host
去申请证书,也可以一个个填写。Email Address for Let's Encrypt
:如果你之前申请过Let's Encrypt
的证书,这里要跟之前的邮件一致。Use a DNS Challenge
:使用DNS
验证模式。DNS Provider
:DNS 提供商,此处以Cloudflare
为例。Credentials File Content
:dns_cloudflare_api_token = <api_key>
,这里的api_key
是你从 Cloudflare 控制台获取的 Cloudflare API token。
Propagation Seconds
:传播秒数。留空以使用插件默认值。等待 DNS 传播的秒数。I Agree to the Let's Encrypt Terms of Service
:同意 Let’s Encrypt 的服务;
- 点击保存(save)
- 申请完成,有效期3个月,到期会自动续期
使用
代理 hosts
- 添加域名和代理地址端口
-
添加 ssl 证书
-
添加自定义配置