什么是反向代理
大家如果使用过科学上网,那么想必对代理有一点认识。我们将客户端的信息交给一个中转的服务器,由中转服务器发送给网站服务器,再获得网站发送给中转服务器的信息,就避开了客户端和网站之间的防火墙。这样的访问方式隐藏了客户端的 IP,称为正向代理。
反向代理呢,就是在网站这一侧建立代理。比如说,百度作为一个搜索引擎,为了提升搜索速度,后台肯定有许多台服务器。这些服务器的 IP 显然是不同的,那么我们在访问 www.baidu.com
的时候,实际上应该连接哪台呢?这个时候就需要一个反向代理服务器来完成任务。通过一些计算方法(计算服务器负载、计算延迟等),反向代理服务器将我们的访问请求发送到选中的一台服务器。而在我们的浏览器里,只会看见 www.baidu.com
的网址而不会看见连接的服务器 IP。这种访问方式隐藏了服务器的 IP,称为反向代理。
目前常用的反向代理应用有 Nginx, HAProxy, FRP 等,但我选择了比较容易上手的 Caddy 作为服务器的反向代理。
Caddy 的好处在于配置简单,同时自动申请 SSL 证书,不用额外配置 HTTPS 连接。
安装 Caddy
参见安装 — Caddy v2中文文档 (dengxiaolong.com)
使用以下命令:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
启动、停止、重启、查看状态:
systemctl start caddy
systemctl stop caddy
systemctl restart caddy
systemctl status caddy
配置 Caddyfile
Caddy 的配置文件是 Caddyfile,它的位置是 /etc/caddy/Caddyfile
。
用编辑器打开 Caddyfile,我们就可以配置代理规则了。
我的 Caddyfile,配置了两个网站的代理:
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace ":80" below with your
# domain name.
pan.jerryhzy.top {
reverse_proxy localhost:5244
encode gzip
}
blog.jerryhzy.top {
reverse_proxy localhost:6773
encode gzip
}
# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile
这里反向代理的端口要和 docker 容器的端口一致,不记得的可以看下上期写的 docker-compose.yml 中端口映射的内容。
配置好 Caddyfile 后,重启服务就可以访问网址了。
端口开放
在我们的阿里云后台,要关注端口的开放权限,否则有可能出现访问不了网站的情况。
80
端口是 HTTP 协议的默认端口,443
端口是 HTTPS 协议的默认端口。
在网址不输入端口号时,会尝试访问 80
端口;如果访问网址以 https://
开头,则改为访问 443
端口。
所以这两个端口是应该开放的。
在防火墙上应该开放的 TCP 端口:80, 443, 22
。第三个是 SSH 登录用,建议看前面的这篇换成别的端口(我换成了 1437)。
至于 ICMP 协议的 -1 端口,这个可以不用管,只表示可以使用 ICMP 协议传递信息,而 -1 表示所有端口 / 不指定端口。
这个时候,我们的网站已经大功告成,可以愉快地开始使用了!