写在开头
本文采用图文解析、结合实战的方式进行网络原理解析,帮助大家去掌握一些网络知识,并了解 Caddy
的基本使用(见下图)。
本人计划在近几年将持续输出深度好文,如果对这类文章感兴趣的话,还请您点个 关注
和 赞
支持一下吧!
引言
大家好呀~
本篇文章主要是安利一个对前端更友好的 web
服务器 Caddy
,我们会介绍 Caddy
的安装使用,并通过图文来解析其原理。
Caddy
是唯一一个在默认情况下自动使用 HTTPS
的 Web
服务器,可以用来完成跨域请求、反向代理、静态文件服务器、部署 History SPA
应用、负载均衡等等功能,在可读性、可维护性和易用性方面都做的很好,对前端更友好!
如果你还是不太理解
Caddy
到底是用来做什么的,那你可以把它简单理解为对前端更友好的nginx
。
反向代理
本文讨论的
代理
仅限于HTTP 代理
,不涉及其他协议。
Caddy
是一个简单好用的 Web
服务器,反向代理
是它的一个核心功能。所以,在介绍 Caddy
之前,我们先介绍一下 反向代理
是什么,反向代理
可以帮我们做什么事情。
我们先来了解一下正向代理,正向代理就是在客户端与服务器之间实现一个代理服务器,客户端的所有请求先经过代理服务器,由代理服务器再去请求真实服务器,请求成功后再由代理服务器将真实服务器的响应结果发回至客户端。
正向代理的经典案例就是公司内部的 VPN
代理,企业员工在 远程开发
时需要先连接 VPN
,再由 VPN
连接至公司服务器。这样做可以防止一些陌生连接,拒绝除 VPN
外的所有外网连接,只有连接 VPN
才能正常访问公司服务器。
我们来画一张图帮助大家理解什么是 正向代理
(见下图)
而反向代理正好相反,反向代理一般是在服务器端,客户端发起的网络请求首先被反向代理服务器收到,再由反向代理服务器决定转发到某个具体的服务。换而言之,反向代理服务器将决定客户端最终访问到的目标服务器,常见的反向代理案例有负载均衡、CDN 加速。
我们在实际开发中,可以使用反向代理来 解决前端跨域问题
、部署前端服务
等等,我们本篇教程也是主要介绍这两个功能的使用。
我们来画一张图帮助大家理解什么是 反向代理
(见下图)
最后使用一句话概括就是:正向代理隐藏真实客户端,反向代理隐藏真实服务端。
Caddy 的优势
我们在实际开发中,可以使用 Caddy
来搭建反向代理服务器,从而完成跨域请求、静态文件服务器、部署 History SPA
应用、负载均衡等等功能,使用 Caddy
来做这些工作的好处是我们通过几行配置文件就可以完成这些工作,非常的简单易用。
在日常开发中我们通常使用 webpack
解决开发环境的跨域和请求转发问题,webpack
的 proxy
选项可以解决大部分跨域和请求转发问题,但是对 history
路由的支持性较差,并且组内开发的成员之间的配置可能会导致冲突,造成额外的维护成本。
使用 nginx
可以解决这些问题,但是 nginx
比较复杂,对前端人员并不是特别友好。在学习 nginx
的过程中我们可能会渐行渐远,忘记了我们的初衷只是为了解决跨域和请求转发问题。
Caddy
使用 Go
语言编写,跨平台性强,配置文件具有高可读性,对前端更友好。在可读性、可维护性和易用性方面的优势成为了选择 Caddy
的理由。
安装 Caddy
介绍了那么多,我们差不多可以进入到实战部分了,先从 安装
开始吧!
Caddy
目前有 1.0
和 2.0
两个大版本,本文是针对 2.0
版本的教程,如果需要使用 1.0
版本的话建议查看 Caddy 1.0 官方文档。
如果想要先了解
Caddy
好不好用,可以先跳过安装
这一节。
Mac 平台
Mac 非常适合开发者,欢迎广大开发者加入 Mac 大家庭。
首先我们需要下载 Caddy,你也可以去 官方地址 下载最新版本。
由于 Caddy
由 go
编写,go
编译后的文件可以直接执行,所以我们下载完成后我们直接解压到自己的目录,比如 ~/bin/
目录。然后我们加上一个映射就可以使用啦,我们使用 vi ~/.bash_profile
命令编辑文件,添加下面这行代码:
export PATH=~/bin
添加了全局映射后,我们使用下面这行命令使我们的改动生效
source ~/.bash_profile
接下来我们输入 caddy version
来验证我们的安装是否生效,如果可以正确输出 caddy
的版本说明已经安装成功啦~(见下图)
Windows 平台
首先我们需要下载 Caddy,你也可以去 官方地址 下载最新版本。
下载完成后,解压到你的常用目录(路径最好别带中文),然后我们复制 Caddy
所在目录的路径(见下图)
然后,我们使用 Win + E
唤起文件管理器,然后右键点击我的电脑,点击 属性
(见下图)
然后,我们选择 高级
,点击 环境变量
(见下图)
然后我们在弹出的窗口中,选中 Path
这一栏(见下图)