创作不易,欢迎请作者喝杯咖啡☕☕☕
我们怎么样才能把 IP + 端口变成域名来访问?
答案是用反向代理。
很多小伙伴可能对反向代理并不是很了解,我们就趁着今天来简单介绍一下。
操作环境
- 服务器:我搭建用的是腾讯轻量应用服务器 (最好是选 非大陆(香港)的服务器)如果是小白刚开始玩的话,还可以购买 Racknerd 的服务器(地区选美西),最低一年不到 100 块
- 系统:Debian 10 或以上。 DD 脚本 非必需 DD,用原来的系统也 OK,之后教程都是用 Debian 或者 Ubuntu 搭建~)
- 需要一个域名(域名购买参考:Namesilo 域名购买 )
- docker 环境(具体看这篇:【Docker 系列】不用宝塔面板,小白一样可以玩转 VPS 服务器!)
什么是代理
首先代理大家都懂 🙂
代理就是第三方。
正向代理
假设你想买美国的苹果,但你在中国。然而,有一个问题,美国的苹果商店只接受美国人的订单,他们不允许中国人购买。为了解决这个问题,你找到了一个在美国的代购,他愿意帮助你购买苹果。这个代购就是正向代理。
你将钱交给代购,并告诉他你想要哪种苹果和数量。代购然后去美国的苹果商店,用他自己的身份下订单,因为他是美国人,所以商店接受了订单。一旦代购拿到苹果,他将它们寄回中国给你。在这个过程中,你的身份是隐藏的,商店只知道有一个美国人购买了苹果,而不知道最终的消费者是谁。
反向代理
顾名思义,正好相反,可以保护卖家的信息。
假设你有一家苹果商店,每天有很多顾客来购买苹果。你的商店在美国,但你也有一些来自中国的顾客。问题是,你的网站只支持英语,而一些中国顾客不太懂英语,所以他们很难在你的网站上购买苹果。
为了解决这个问题,你雇了一个翻译,这个翻译知道中文和英文。这个翻译就像是反向代理服务器。
当中国顾客来到你的网站时,他们实际上是连接到了翻译,而不是直接连接到你的商店。他们告诉翻译他们想要购买什么苹果,然后翻译会将他们的请求翻译成英文,并将这个请求发送给你的商店。商店接收到翻译的请求后,处理订单并将响应发送给翻译。翻译再将响应翻译成中文,并传递给中国顾客。这样,中国顾客可以在不懂英语的情况下购买苹果,因为有翻译帮助他们。
好了,回来。
没有了宝塔,我们今天用一个更简单的 Docker 项目来完成反向代理的操作。
Nginx Proxy Manager
Nginx proxy manager 是一个很简单的反向代理工具。
官网:https://nginxproxymanager.com/
门槛极低,操作简单,不需要你掌握很复杂的 Nginx 配置知识,只需要几步就能很轻松完成反向代理的设置和 SSL 证书的部署。
it had to be so easy that a monkey could do it.
开始部署
服务器环境:Ubuntu 20.04(Debian 10 也可以)或以上版本
选择一款连接 SSH 的软件。
如果不会可以看这个文档:连接 SSH 的软件和相关操作
Mac 或者 Linux 用户可以直接用系统自带的终端
(也叫 Terminal
)来登陆服务器。
输入:
ssh 你的用户名@你的服务器IP -P 22
如果你没有更改 ssh 的端口,默认就是 22
,当然为了服务器安全,建议你可以换一个别的端口,具体请见:保护好你的小鸡!保姆级服务器安全教程!
添加 SWAP 虚拟内存
设置 SWAP 可以用脚本:
wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh
选择 18
,然后输入你想要扩容的数值即可。
升级 packages
sudo -i # 切换到 root 用户
apt update -y # 升级 packages
apt install wget curl sudo vim git -y # Debian 系统比较干净,安装常用的软件
安装 Docker 环境
安装 Docker(非大陆服务器)
wget -qO- get.docker.com
| bash
docker -v #查看 docker 版本
systemctl enable docker # 设置开机自动启动
安装 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 版本
安装 Docker(国内服务器)
curl -sSL https://get.daocloud.io/docker | sh
docker -v #查看 docker 版本
systemctl enable docker # 设置开机自动启动
安装 Docker-compose(国内服务器)
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 版本
修改 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
安装 Nginx Proxy Manager
创建安装目录
创建一下安装的目录:
sudo -i
mkdir -p /home/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'
# 冒号左边可以改成自己服务器未被占用的端口
- '81:81'
# 冒号左边可以改成自己服务器未被占用的端口
- '443:443' # 冒号左边可以改成自己服务器未被占用的端口
volumes:
- ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
- ./letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中
按一下 esc
,然后 :wq
保存退出,之后,
打开服务器防火墙并访问网页(非必需)
打开防火墙的端口 81
举例,腾讯云打开方法如下:
图中示例填的是 5230
,备注填的是 memos
,这边我们填 81
,示例填 nginxproxymanager
,确定即可(如果你在 docker-compose 文件里换了 82
,这边就需要填 82
,以此类推)
查看端口是否被占用(以 81
为例),输入:
lsof -i:81 #查看 81 端口是否被占用,如果被占用,重新自定义一个端口
如果啥也没出现,表示端口未被占用,我们可以继续下面的操作了~
如果出现:
-bash: lsof: command not found
运行:
apt install lsof #安装 lsof
运行并访问 Nginx Proxy Manager
如果端口没有被占用(被占用了就修改一下端口,比如改成 82
,注意 docker 命令行里和防火墙都要改)
最后:
cd /home/docker_data/npm # 来到 <a href="https://www.iigeek.com/archives/tag/docker-compose"><b style="color:#378e3c">docker-compose</b></a> 文件所在的文件夹下
docker-compose up -d
理论上我们就可以输入 http://ip:81
访问了。
默认登陆名和密码:
Email: admin@example.com
Password: changeme
注意:
1、不知道服务器 IP,可以直接在命令行输入:
curl ip.sb
,会显示当前服务器的 IP。2、遇到访问不了的情况,请再次检查在宝塔面板的防火墙和服务商的后台防火墙是否打开对应了端口。
更新 Nginx Proxy Manager
cd /home/docker_data/npm
docker-compose down
cp -r /home/docker_data/npm /home/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 搭建的应用,更新非常容易~
卸载 Nginx Proxy Manager
cd /home/docker_data/npm
docker-compose down
rm -rf /home/docker_data/npm # 完全删除映射到本地的数据
可以卸载得很干净。
最后
NPM 的功能还有很多,预计还有两期,一期讲泛域名证书的配置,一期讲安全防护,这次只是简单介绍一下,大家可以发挥钻研精神,自己先研究研究。
有了 NPM,可以统一管理,的确方便了很多,但总觉得还缺少点什么?有没有类似 NPM 这种有 UI 界面的工具,可以让我们直观地看到 Docker 的容器呢?Docker 容器如果也可以统一管理,查看状态就很棒,别急,下期给大家带来!
暂无评论内容