Lumengde's Blog

Nginx 管理器 | Nginx Proxy Manager | 反向代理神器

2024-09-21
互联网技术
Nginx
VPS折腾
最后更新:2024-10-02
7分钟
1340字

前言

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

创建安装目录

Terminal window
1
sudo -i
2
3
mkdir -p /root/data/docker_data/npm
4
5
cd /root/data/docker_data/npm

编辑 docker-compose.yml 配置文件

1
vim docker-compose.yml

填入以下内容

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

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

检查一下端口占用

1
lsof -i:81

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

1
# 如果报错
2
-bash: lsof: command not found
3
4
# 那就安装一下再检查
5
apt install lsof

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

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

Terminal window
1
docker compose up -d
2
3
docker compose logs -f # 查看日志(可选)

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

默认登录账号密码为

2
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
# 查看本机Docker内部默认网关
2
ip addr show docker0
3
4
# 查看本机VPS的IP
5
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

Terminal window
1
cd /root/data/docker_data/npm
2
3
docker compose down
4
5
cp -r /root/data/docker_data/npm /root/data/docker_data/npm.archive # 备份
6
7
docker compose pull
8
9
docker compose up -d
10
11
docker image prune

卸载NPM

Terminal window
1
cd /root/data/docker_data/npm
2
3
docker compose down
4
5
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添加解析记录即可。

通过Aliyun DNS获取SSL证书

参考:https://www.suiu.cc/archives/npm

阿里的那就参考阿里云文档 - 创建AccessKey,创建AccessKey,得到AccessKey ID和AccessKey Secret,这两个就是dns_aliyun_access_key和dns_aliyun_access_key_secret的值。建议先刷新Nginx Proxy Manager网站,并确定自己域名用的是阿里的DNS,然后再添加Let’s Encrypt证书。不行就等一会再试。

本文标题:Nginx 管理器 | Nginx Proxy Manager | 反向代理神器
文章作者:lumengde
发布时间:2024-09-21
感谢大佬送的咖啡!!!☕
alipayQRCode
wechatQRCode