首页 > 其他分享 >Go每日一库之131:caddy(轻量web服务器)

Go每日一库之131:caddy(轻量web服务器)

时间:2023-09-29 21:15:51浏览次数:42  
标签:web http service Caddy sudo caddy etc 轻量

一直以来,我都是使用 Nginx 作为 Web 服务器,但是配置可以说是非常麻烦了。每次我要新开一个域名,都要先使用 acme.sh 签发 SSL 证书,然后再写配置,大概要花上 5 分钟的时间。曾经想过写个脚本自动完成这些工作,但是苦于对 Linux 的了解不多,也就作罢了。
最近看到了 Caddy,一个用 Go 写的 Web 服务器,它的配置简洁,同时能自动开启 HTTPS、支持 HTTP/2 && QUIC,完全符合我的需求啊,研究一番,就在我的服务器部署了,本文作一个简单记录。
我的操作系统是 Debian Jessie ,理论上只要是带有 Systemd 的系统都适用本文。

下载安装

首先去 Download Caddy,选择你系统平台、插件、是否开启监控(TELEMETRY)、许可证;例如我选的是

  • Platform: Linux 64
  • Plugins: http.cache, http.cors, http.expires, http.filter, http.git, tls.dns.cloudflare
  • TELEMETRY: ON
  • License: Personal

然后复制下方的 **One-step installer script (bash)**,在命令行运行就可以了。

CADDY_TELEMETRY=on curl https://getcaddy.com | bash -s personal http.cache,http.cors,http.expires,http.filter,http.git,tls.dns.cloudflare

安装完后输入 **which caddy**,不出意外的话会输出 **/usr/local/bin/caddy**
至此,安装完毕,但是目前它不会开机自启,只是简单地把二进制文件下载下来,所以下一步要注册服务。

注册服务

这里我使用的是官方提供的脚本 caddy.service,其他系统也可以在这里找到相应的脚本。
把这个文件下载到 **/etc/systemd/system/**

sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service

创建所需目录,我图方便没有修改脚本直接使用默认值了,如果有特殊需求,可以自己更改目录。

sudo mkdir /etc/caddy
sudo chown -R root:www-data /etc/caddy
sudo touch /etc/caddy/Caddyfile

sudo mkdir /etc/ssl/caddy
sudo chown -R www-data:root /etc/ssl/caddy
sudo chmod 0770 /etc/ssl/caddy

sudo mkdir /var/www
sudo chown www-data:www-data /var/www

上面创建了三个目录:

  1. **/etc/caddy** 用了存放 Caddy 的配置文件
  2. **/etc/ssl/caddy** 存放证书
  3. **/var/www** 是默认的网站目录

接着,重新加载 systemd daemon,让配置生效。
sudo systemctl daemon-reload
让 Caddy 开机自启。
sudo systemctl enable caddy.service
至此,Caddy 已经成功注册服务,并能够开机自启了。

配置

这部分的内容我不打算详细记录,主要是官方文档已经写的很详细了。
下面是我的配置,

example.com {
  proxy / 127.0.0.1:9001 {
    header_upstream Host {host}
    header_upstream X-Real-IP {remote}
    header_upstream X-Forwarded-For {remote}
    header_upstream X-Forwarded-Proto {scheme}
  }
  gzip
    header / -Server
    header / Strict-Transport-Security "max-age=31536000;"
    tls [email protected] {
    protocols tls1.0 tls1.2
      dns cloudflare
  }
}

如果要使用 DNS 的方式认证域名的话,需要设置环境变量,修改 **/etc/systemd/system/caddy.service** ,加入环境变量,我使用的是 CloudFlare 的 DNS,所以我需要添加 CLOUDFLARE_EMAILCLOUDFLARE_API_KEY ,其他 DNS 看这里

[Service]
...
...

Environment=CADDYPATH=/etc/ssl/caddy
+ Environment=CLOUDFLARE_EMAIL=xxx
+ Environment=CLOUDFLARE_API_KEY=xxx
...
...

写完配置后输入 **sudo systemctl start caddy.service** 启动 Caddy。
输入 **journalctl --boot -u caddy.service** 可以查看日志。

启用 QUIC

关于 QUIC 的介绍,可以看一下这篇文章,一句话概况呢就是减少 TLS 握手次数,加快网站速度。
修改 **/etc/systemd/system/caddy.service** ,在 **ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp** 后面加上 **-quic** ,即

ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp -quic

然后重新加载 Systemd,并重启 Caddy

sudo systemctl daemon-reload
sudo systemctl restart caddy.service

同时,别忘了给主机开放 443 (UDP) 端口。

目前 QUIC 只有 Chrome 支持,并且需要手动开启(默认只有白名单域名启用)。访问 **chrome://flags/#enable-quic**,切换为 Enabled 即可。

目前 Chrome 已对所有域名开放 QUIC,同时 HTTP/3 将使用 QUIC。开启后,重启 Chrome,访问网站,通过 Chrome DevTools - Security 可以看到协议已经是 QUIC 了。
每日一库之131:caddy(轻量web服务器)-0

关于性能

Caddy 是 Go 写的,性能方面是稍落后于 Nginx 的,但其实对于小站来说,这一点性能差距是可以忽略的,毕竟 You Are Not Google

与Nginx对比

优点

  1. caddy 发挥了 go 传统的优势安装没有依赖,安装和使用更方便
  2. 自动化的 https 证书的申请,很让人舒服
  3. 配置项更加清晰和简单,一目了然
  4. windows下更友好

缺点

  1. 性能比 nginx 略逊一筹
  2. 重启的时候 https 会重新申请,会有短暂的停顿
  3. 毕竟新起之秀,生态还不够强大,应用案例也不多

标签:web,http,service,Caddy,sudo,caddy,etc,轻量
From: https://www.cnblogs.com/arena/p/17737340.html

相关文章

  • Go每日一库之144:go-obs-websocket(OBS连接器)
    推荐理由互联网的兴起带动了直播行业的火热,除了少数直播网站有自己的推流工具之外,OBS是主流的推流工具,广泛应用在直转播技术之上。简介go-obs-websocket是一个与OBS进行websocket通信的连接库,具备调用大部分OBS功能的接口,在互动直播和智能转播技术上广泛应用。快速开始安装g......
  • Go每日一库之140:Zinc(轻量级搜索引擎)
    ‍项目介绍Zinc是一个轻量级替代Elasticsearch的开源搜索引擎。Elasticsearch真的好用,但是Elasticsearch安装和配置也是真的繁琐,后续的一些维护也有一定成本。另外一个Elasticsearch的不足就是服务运行起来需要的计算资源较多,对于普通的用户来说是有点浪费的。Zinc,拥有......
  • Web服务架构
    W3C将服务定义为:“服务提供者完成一组工作,为服务使用者交付所需的最终结果”。WebService(Web服务)是解决应用程序之间相互通信的一项技术。严格地说Web服务是描述一系列操作的接口,它使用标准的、规范的XML描述接口。这一描述中包括了与服务进行交互所需要的全部细节,包括消息......
  • 第十一节 移动web
    移动Web第一天目标:使用位移、缩放、旋转、渐变效果丰富网页元素的呈现方式。01-平面转换简介作用:为元素添加动态效果,一般与过渡配合使用概念:改变盒子在平面内的形态(位移、旋转、缩放、倾斜)平面转换也叫2D转换,属性是transform平移transform:translate(X轴移动距离......
  • python代码转成php代码的工具 或者go转成php的代码,想把odoo改成成php swoole当成web服
    目前市场上有一些可以将Python代码转换为PHP代码的工具,例如:Transcrypt:Transcrypt是一个将Python代码转换为JavaScript和PHP的工具。它可以将Python代码转换为相应的PHP代码,并保持语法和结构的一致性。Pythran:Pythran是一个专门用于加速Python代码执行的工具,但它也提供了将Python代......
  • web前端tips:js继承——寄生式继承
    上篇文章给大家分享了js继承中的原型式继承web前端tips:js继承——原型式继承今天给大家分享一下js继承中的寄生式继承寄生式继承寄生式继承(ParasiticInheritance)是一种基于原型式的继承方式,它通过创建一个仅用于封装继承过程的函数,该函数在内部调用原型式继承创建......
  • Web Services使用SOAP Header
    https://blog.csdn.net/szg3827/article/details/2232809https://www.cnblogs.com/zxh1919/p/7670110.html许多的公司都有自己的web服务来支撑自己系统内的运营逻辑,并且是非公开的,那么如何对自己的web服务进行验证呢?不可能任何一个知道你的webserviceurl的人都可以去调用你的......
  • weblogic乱码报错解决思路
    目录1.集群备份weblogic虚拟机快照备份2.查看主节点控制台面板状态3.尝试启动程序失败4.查看162.主节点日志5.发现程序中乱码6.修改乱码名称7.尝试启动,新的报错还是显示乱码8.修改乱码9.点击更新程序,继续报错9.1依然是乱码10.更新,程序部署路径,换新程序,11.删除程序,处理程序中的乱码......
  • webstorage
    title:Web存储方式tags:-WebStorage-htmlcategories:干垃圾keywords:Web存储方式description:Web存储方式top:repost:truehot:trueothers:date:2019-01-1719:30:07{%noteinfono-icon%}Web的几种存储方式介绍web存储方式有哪些?如下图,常见的浏览......
  • websocket
    title:Websocket简介tags:WebSocketcategories:干垃圾keywords:WebSocketdescription:Websocket简介top:repost:hot:others:date:2020-01-1113:13:13{%notewarningno-icon%}  随着网际网络的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了......