![Docker 容器 搭建一个反向代理神器 —Nginx Proxy Manager](https://www.mohe-sc.com/wp-content/uploads/2023/11/Docker-容器-搭建一个反向代理神器-—Nginx-Proxy-Manager-1024x576.jpg)
1.Nginx Proxy Manager反向代理?
众所周知,浏览器访问网页需要域名:端口号
或者ip:端口号
这种形式,而当你访问页面时不输入端口号时,浏览器会根据http
协议或者https
协议,自动在后面加上默认端口号80
或者443
。
但是我这种小白使用服务器搭建服务时,一个服务器上往往有多种web服务。端口又不能复用,所以其他服务都是需要域名:端口号
或者ip:端口号
这种形式来访问。于是,我就有一个疑问了,能不能用不同的域名来对应不同的服务呢。
那这就是反向代理的作用了。
反向代理类似于一个菜鸟驿站。邮局(互联网)对于地址(域名)是每个咱们小区(服务器)的包裹(数据报文)都直接发给咱们小区的菜鸟驿站(反向代理服务器),然后菜鸟驿站根据每个包裹地址(域名)然后交付给咱们小区的具体家庭(服务器中的每一个服务)。
之前有宝塔的时候,碰到这个情况,我们会先新建一个站点,然后修改 Nginx 配置文件:
location / {
proxy_pass http://178.18.249.61:8123/;
rewrite ^/(.*)$ /$1 break;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade-Insecure-Requests 1;
proxy_set_header X-Forwarded-Proto https;
}
而Nginx则作为非常有名的反向代理web服务器,被广大站长采用。Nginx功能十分强大,但是配置对于小白来说,还是有一些门槛。那么有没有一款基于Nginx的web管理界面,来设置Nginx的反向代理呢?
这就是此篇博客要写的神器:Nginx Proxy Manager。
2.Nginx Proxy Manager主要功能?
以下是Nginx Proxy Manager的官网介绍
This project comes as a pre-built docker image that enables you to easily forward to your websites running at home or otherwise, including free SSL, without having to know too much about Nginx or Letsencrypt.
该项目作为一个预构建的 docker 镜像提供,使您能够轻松地转发到在家里或其他地方运行的网站,包括免费的 SSL,而无需对 Nginx 或 Letsencrypt 有太多了解。
它的功能总结起来就是以下几点:
- 轻松的反向代理设置
- 轻松配置HTTPS
- 提供简单的访问权限设置
好了,talk is cheap。接下来进入Nginx Proxy Manager一系列实战操作,让我们玩转Nginx Proxy Manager!
3.Nginx Proxy Manager开始部署
服务器环境:Debian 10(Ubuntu 20.04 也可以)或以上版本
Mac 或者 Linux 用户可以直接用系统自带的终端
(也叫 Terminal
)来登陆服务器。
输入:
ssh 你的用户名@你的服务器IP -P 22
如果你没有更改 ssh 的端口,默认就是 22,当然为了服务器安全,建议你可以换一个别的端口!
添加 SWAP 虚拟内存
注意:VPS 的内存如果过小,建议设置一下 SWAP,一般为内存的 1-1.5 倍即可,可以让系统运行更流畅!
设置 SWAP 可以用脚本:
wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh
![图片[2]-Docker 容器 搭建一个反向代理神器 —Nginx Proxy Manager](https://pic.turnfish.top/images/2023/11/04/10002.jpg)
选择 18
,然后输入你想要扩容的数值即可。
![图片[3]-Docker 容器 搭建一个反向代理神器 —Nginx Proxy Manager](https://pic.turnfish.top/images/2023/11/04/10003.jpg)
A.升级 packages
sudo -i # 切换到 root 用户
apt update -y # 升级 packages
apt install wget curl sudo vim git -y # Debian 系统比较干净,安装常用的软件
B.安装 Docker 环境
1.安装 Docker(非大陆服务器)
wget -qO- get.docker.com | bash
docker -v #查看 docker 版本
systemctl enable docker # 设置开机自动启动
2.安装 Docker-compose(非大陆服务器)
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version #查看 docker-compose 版本
3.安装 Docker(国内服务器)
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.1.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version #查看 docker-compose 版本
4.修改 Docker 配置(可选)
以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘(泪的教训):
cat > /etc/docker/daemon.json <<EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "3"
},
"ipv6": true,
"fixed-cidr-v6": "fd00:dead:beef:c0::/80",
"experimental":true,
"ip6tables":true
}
EOF
然后重启 Docker 服务:
systemctl restart docker
5.安装 Nginx Proxy Manager
创建安装目录
创建一下安装的目录:
sudo -i
mkdir -p /root/data/docker_data/npm
cd /root/data/docker_data/npm
这边我们直接用 docker 的方式安装。
vim docker-compose.yml
英文输入法下,按 i
version: '3'
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 文件夹中
按一下 esc
,然后 :wq
保存退出,之后,
打开服务器防火墙并访问网页(非必需)
打开防火墙的端口 81
举例,腾讯云打开方法如下:
![图片[4]-Docker 容器 搭建一个反向代理神器 —Nginx Proxy Manager](https://pic.turnfish.top/images/2023/11/04/10004.jpg)
![图片[5]-Docker 容器 搭建一个反向代理神器 —Nginx Proxy Manager](https://pic.turnfish.top/images/2023/11/04/10005.jpg)
图中示例填的是 5230
,备注填的是 memos
,这边我们填 81
,示例填 nginxproxymanager
,确定即可(如果你在 docker-compose 文件里换了 82
,这边就需要填 82
,以此类推)
![图片[6]-Docker 容器 搭建一个反向代理神器 —Nginx Proxy Manager](https://pic.turnfish.top/images/2023/11/04/10006.jpg)
查看端口是否被占用(以 81
为例),输入:
lsof -i:81 #查看 81 端口是否被占用,如果被占用,重新自定义一个端口
如果啥也没出现,表示端口未被占用,我们可以继续下面的操作了~
如果出现:
-bash: lsof: command not found
运行:
apt install lsof #安装 lsof
如果端口没有被占用(被占用了就修改一下端口,比如改成 82
,注意 docker 命令行里和防火墙都要改)
运行并访问 Nginx Proxy Manager
最后:
cd /root/data/docker_data/npm # 来到 dockercompose 文件所在的文件夹下
docker-compose up -d
理论上我们就可以输入 http://ip:81
访问了。
默认登陆名和密码:
Email: admin@example.com
Password: changeme
注意:
1、不知道服务器 IP,可以直接在命令行输入:
curl ip.sb
,会显示当前服务器的 IP。2、遇到访问不了的情况,请再次检查在宝塔面板的防火墙和服务商的后台防火墙是否打开对应了端口。
6.更新 Nginx Proxy Manager
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-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。
docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像
提示:
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N]
输入 y
利用 Docker 搭建的应用,更新非常容易~
7.卸载 Nginx Proxy Manager
cd /root/data/docker_data/npm
docker-compose down
rm -rf /root/data/docker_data/npm # 完全删除映射到本地的数据
可以卸载得很干净。
8.结尾
NPM 的功能还有很多,预计还有两期,一期讲泛域名证书的配置,一期讲安全防护,这次只是简单介绍一下,大家可以发挥钻研精神,自己先研究研究。
有了 NPM,可以统一管理,的确方便了很多,但总觉得还缺少点什么?有没有类似 NPM 这种有 UI 界面的工具,可以让我们直观地看到 Docker 的容器呢?Docker 容器如果也可以统一管理,查看状态就很棒,别急,下期给大家带来!
请登录后查看评论内容