安装部署
概述
Nginx Proxy Manager (NPM) 是一个基于 Nginx 的反向代理管理工具,旨在简化 Nginx 的配置和管理。它提供了一个直观的 Web 界面,使用户可以轻松地设置和管理反向代理、SSL 证书、访问控制等功能。
官网:https://nginxproxymanager.com/
GitHub:https://github.com/NginxProxyManager/nginx-proxy-manager
安装Docker和Docker Compose
如果你的系统上还没有安装Docker和Docker Compose,你可以根据你的操作系统参考官方文档进行安装:
创建项目目录
创建一个目录来存放Docker Compose文件和相关配置文件:
mkdir nginx-proxy-manager
cd nginx-proxy-manager
创建Docker Compose文件
在项目目录中创建一个名为docker-compose.yml
的文件,并添加以下内容:
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
启动
在项目目录中运行以下命令启动Nginx Proxy Manager,这将下载所需的Docker镜像并启动容器。
docker-compose up -d
# 如果使用docker-compose-plugin
docker compose up -d
数据存储方式说明
Nginx Proxy Manager默认使用SQLite数据库来存储其数据,包括配置、代理主机信息、SSL 证书等。除此之外,Nginx Proxy Manager还可以使用MySQL来进行数据存储。
以下是一个docker-compose.yml
文件,Nginx Proxy Manager使用MySQL进行数据存储的示例
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# These ports are in format <host-port>:<container-port>
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Add any other Stream port you want to expose
# - '21:21' # FTP
environment:
# Mysql/Maria connection parameters:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
# Uncomment this if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- db
db:
image: 'jc21/mariadb-aria:latest'
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
MARIADB_AUTO_UPGRADE: '1'
volumes:
- ./mysql:/var/lib/mysql
Web管理控制台
访问Web界面
一旦容器启动,你可以通过浏览器访问Nginx Proxy Manager的Web界面。默认地址是
http://<your-server-ip>:81
。
登录
首次登录时,使用以下默认凭据
Email: admin@example.com
Password: changeme
登录后,系统会提示更改默认密码。
基本使用
域名与IP绑定
在域名管理服务商那里添加域名与IP的绑定关系。
这里添加一条DNS解析,也就是创建一个二级域名:类型:A
、名称:npm
、IP:服务器IP
。
这表示:访问二级域名npm.域名
即可访问服务IP。
添加代理主机
在Web界面中,可以添加新的代理主机来管理反向代理配置。
点击Proxy Hosts
选项卡
然后点击Add Proxy Host
按钮
在添加代理主机的页面中,填写以下信息:
配置说明
Domain Names :填写网站域名,需要上面做好DNS解析,把域名绑定到服务器IP
Scheme : 选择HTTP或HTTPS。默认http即可,除非有自签名证书
Forward Hostname/IP :填写要代理到的目标主机名或IP地址,或者Docker容器内部IP(NPM和程序服务在同一台服务器上)
Forward Port:填写目标主机的端口号,这里是NPM管理界面81端口
Cache Assets :缓存,根据需求选择打开
Block Common Exploits: 阻止常见的漏洞,根据需求选择打开
Websockets Support :WS支持,根据需求选择打开
Access List: NPM自带的一个限制访问功能
注意:
这里填的是172.17.0.1
,为Docker容器内部的IP地址。可以通过下面的命令查询:
[root@vm ~]# ip addr show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:39:63:84:15 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
保存并应用配置
填写完所有必要的信息后,点击
Save
按钮保存配置。Nginx Proxy Manager会自动生成并应用Nginx 配置文件。
此时,浏览器访问二级域名http://<your-server-domain>
即可访问到Nginx Proxy Manager的管理界面
一键申请SSL证书
申请SSL证书,让网站支持https访问。
选择创建一个新的证书,勾选强制SSL,填写邮件、同意条款,点击Save即可申请SSL证书
此时,浏览器就可以使用https访问,并提示连接安全
申请泛域名SSL证书
泛域名SSL证书就是指:申请一个二级域名
*.xxx.com
证书,这样二级域名无论是什么都可以用这个证书,不再需要为每一个二级域名申请一个SSL证书。
获取API令牌
这里使用Cloudflare托管域名,故登录Cloudflare,获取域名服务商的API令牌
API令牌:在Cloudflare仪表板中,点击右上角的头像,然后选择我的个人资料,在左侧菜单中,选择API 令牌
创建新的API令牌:点击创建令牌按钮
选择API令牌模板:Cloudflare提供了一些预定义的模板,可以选择其中之一,也可以自定义令牌。
根据API令牌用途选择不同模板:对于Nginx Proxy Manager,通常选择编辑区域DNS模板是一个不错的选择。
使用模板后,只需要修改区域资源
项,选择要操作的域名
即可
得到如下提示,获得API令牌
添加泛域名证书
选择SSL Certificates -> Add SSL Certificate -> Let's Encrypt
选项
填写域名: *.域名
或域名 *.域名
、邮箱
勾选:Use a DNS Challenge
、选择DNS提供商:Cloudflare
,根据模板提示填入服务商处获取的API令牌
勾选同意条款
,然后保存即可
新建代理
进入Proxy Hosts
,新建一个反向代理:指定一个二级域名,同时指定某个程序服务端口
证书配置这里指定泛域名证书
验证
浏览器以https方式访问指定的二级域名,不出意外即可访问对应的服务