说到Web 服务器,我们大多想到的是 Apache 这个老前辈和如日中天的Nginx,但是这里今天我将要分享的是 Web 服务器和反向代理服务器的新秀 Caddy。在我们拥有了这么强大的 Nginx 以后我们为什么还需要 Caddy?
我认为 Caddy 之所以可以占有一席之地是因为它的两大法宝:配置简单
和 自动启用 HTTPS
。下面带下面快速上手这个软件。
安装
Caddy 提醒定制化的下载,可以自由选择各种插件和平台。请前往: https://caddyserver.com/download 下载。 也可以使用这个一键安装脚本:
完成之后,我们可以尝试执行下caddy -version
。 当你看到有有类似:Caddy 0.10.9
,即表示安装成功。
Hello World
在命令行里面直接输入caddy
,然后打开浏览器输入: http://ip:2015
。 看到什么了吗? 你得到了一个404页面。Caddy 已经成功运行了。相比与其他浏览器需要各种配置文件才能运行相比,这就是 Caddy 的简单之处,不需要任何配置文件即可运行。当然当我们需要各种高级功能的时候,配置文件还是必不可少的。
默认情况下,Caddy 运行在2015
端口。我们可以可以 Caddy 强大的命令行工具来自定义运行端口。
在无配置文件的情况下,Caddy 默认是映射当前程序执行的目录所有文件。因此我们可以快速创建一个文件:
再次刷新浏览器,刚才我们写的 Hello Caddy
已经出现在页面上了
强大的配置文件
Caddy 各种强大的功能还得需要 Caddyfile 体现。我们可以在任意目录放置我们的配置文件,通过命令行caddy -conf
即可指定
Host 目录下的网页
|
|
这里简单解释下,0.0.0.0
表示我们将网站绑定至可以访问到本机的任意一个 IP;8080
表示我们将网站暴露在8080端口; root
参数则表示网站的根节点。这就是最简单的一个Host 网站的配置。
当前我们可以对网站添加更多的配置。比如设置响应过期时间,启用 gzip, 指定各种日志的输出端。
|
|
配置反向代理
什么时候你会需要反向代理呢?想象你有一个前后端分离的程序。前端是通过 JS 发送 Ajax 请求后端 API。默认情况下前端程序占用一个端口,后端占用一个另外端口。我们会遇到两个问题: CORS(跨域请求)和额外的 Options 请求。 这个时候我们就可以使用反向代理让前端和后端共享一个端口。
那怎么做呢,在 Caddy 里面也特别简单,假设我们的前端就是上面的那样,而我们的后面之前都运行在:http://ip:4000
下面。而且我们的 后端 API URL 里面都有 /api
|
|
这里的配置的意思是说,当浏览器收到所有包含:8080/api
的请求都会自动转发到127.0.0.1:4000/api
这个地址,而:8080/api
后面的地址会自动转发下去,而transparent
这个设置保证了我们的转发不会在浏览器生成任何额外的301
或者302
请求。
自动 HTTPS
Caddy 另外一个亮点就是,可以为已经绑定域名
的在公网
运行的服务器自动从 Let’s Encrypt生成和下载 HTTPS 证书,让你的网站支持 HTTPS 协议访问,保证网站数据传输的安全。很简单,你所需的仅仅是将绑定的 IP 改成域名。
再次运行Caddy,按照提示输入你的 Email 之后。Caddy 会自动帮你获取并启用 HTTPS 证书。
总结
通过上面的例子,我们可以看出 Caddy的快速上手能力和超级实用的 HTTPS 功能。除此之前 Caddy 还提供一大堆的插件供我们使用。比如直接访问 Markdown 文件、Host Git 仓库的文件、将自身 Metric 数据传到 Prometheus 等等。快去试试吧!