前言

Nginx 是运行在 Linux上 的 web 服务器软件,通过监听 VPS 的80、443端口来处理 web 相关请求。还可以将搭建的项目请求路径由IP:端口号改为自己的域名,但是需要自己编写反向代理配置。

Nginx Proxy Manager 是一个 Nginx 的代理管理器。即使没有 Nginx 基础,也能轻松地用它来完成反向代理的操作,而且因为自带面板,操作极其简单,一键即可申请 Let’s Encrypt 的 SSL 证书,每三个月自动续期,非常适合配合 docker 搭建的应用使用。

项目展示 [无图]

内存占用:115M,缓慢增长

开始安装

参考教程:

扩展阅读:

简易流程:

安装 Docker

我们通过Docker来部署NPM,所以需要先安装Docker Compose。

参考:【VPS实用项目搭建】Docker Compose 安装及常用命令整理

安装 NPM

创建安装目录

1
2
3
4
5
sudo -i

mkdir -p /root/data/docker_data/npm

cd /root/data/docker_data/npm

编辑 docker-compose.yml 配置文件

1
vim docker-compose.yml

填入以下内容

1
2
3
4
5
6
7
8
9
10
11
12
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # 保持默认即可,不建议修改左侧的80
- '81:81' # 冒号左边可以改成自己服务器未被占用的端口
- '443:443' # 保持默认即可,不建议修改左侧的443
volumes:
- ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
- ./letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中

vim编辑器使用方法:
在文件内按 i 开启编辑模式,按 ESC 退出编辑模式
ctrl+: 输入指令,wq 指令为保存并退出

检查一下端口占用

1
lsof -i:81

如果啥也没出现则表示端口未被占用,否则要在 docker-compose.yml 修改 :81 左侧为其他未被占用端口。

1
2
3
4
5
# 如果报错
-bash: lsof: command not found

# 那就安装一下再检查
apt install lsof

此外要在安全组/防火墙中开放81端口

根据配置文件创建并在后台运行容器

1
2
3
docker compose up -d

docker compose logs -f # 查看日志(可选)

这样就安装好了 Nginx Proxy Manager。此时输入 IP:81 即可打开NPM管理面板。

默认登录账号密码为

1
2
Email:		admin@example.com
Password: changeme

进入面板后可以先改一下账号信息。

申请泛域名SSL证书

对Docker进行反代,如果域名需要使用https协议,则需要SSL证书。NPM可以为我们一键申请由Let’s Encript 颁发的SSL证书。通过申请泛域名证书,则可以一次性为某个域名及其子域名申请一张证书,不用每个项目都申请一次证书,方便。

参考教程:【Docker系列】反向代理神器NginxProxyManager——通配符SSL证书申请 | 爱玩实验室 (iwanlab.com)

打开NPM->SSL Certificates->Add SSL Certificate,填入域名:xxx.com和*.xxx.com,填入邮箱,勾选I agree xxx。

保存后即可使用该证书。

配置反向代理

后续用Docker搭建的应用都可以用NPM来配置反向代理。也可以为自身配置反代。

1
2
3
4
5
# 查看本机Docker内部默认网关
ip addr show docker0

# 查看本机VPS的IP
curl ip.sb

打开NPM,Add Proxy Host,

在Details中:域名例如npm.lumengde.com,Scheme为http,IP为本机IP或docker内部默认网关172.17.0.1,勾选后两项。

在SSL中:选中对上一步申请的SSL证书即可,勾选Force SSL。

此外,在DNS服务商处添加该子域名解析。

然后等一会,访问对应的域名即可成功访问网站。

更新&卸载

更新NPM

1
2
3
4
5
6
7
8
9
10
11
cd /root/data/docker_data/npm

docker compose down

cp -r /root/data/docker_data/npm /root/data/docker_data/npm.archive # 备份

docker compose pull

docker compose up -d

docker image prune

卸载NPM

1
2
3
4
5
cd /root/data/docker_data/npm

docker compose down

rm -rf /root/data/docker_data/npm

通过CF DNS获取SSL证书

如果域名改用CloudFlare的DNS,则NPM申请SSL证书需要通过CD的API Token。

打开CloudFlare->头像->My Profile->API Tokens->Create Token->Edit zone DNS->Zone Resources选All zones->Continue to summary->Create Token

然后会得到类似这样的令牌和测试可用性代码。

令牌:fl5s-SQqful_DkyDFlU7syMLmb2fXA2UoiqnZ1nN

测试可用性代码:

1
curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \     -H "Authorization: Bearer fl5s-SQqful_DkyDFlU7syMLmb2fXA2UoiqnZ1nN" \     -H "Content-Type:application/json"

可以先执行代码看下令牌可用性。

打开NPM->SSL Certificates->Add SSL Certificate,输入泛域名,勾选Use a DNS challenge,选择Cloudflare。在dns_cloudflare_api_token =后替换自己的令牌,勾选I agree xxx…,点击保存即可。

后续域名在CF添加解析记录即可。