什么是Caddy

Caddy是易于配置和使用的Apache Web服务器的替代产品。Caddy的项目负责人Matthew Holt声称Caddy是一种通用的网络服务器,声称是最人性化的设计,并且可能是唯一的此类服务器。

Caddy是唯一一个可以使用Let's Encrypt自动获取和更新SSL/TLS证书的Web服务器。

Caddy的特点

  • 使用HTTP/2的快速HTTP请求。
  • 具有最少配置和无忧部署的功能强大的Web服务器。
  • TLS加密可确保通过Internet进行通信的应用程序和用户之间的加密。您可以使用自己的密钥和证书。
  • 易于部署/使用。仅一个文件,不依赖任何平台。
  • 无需安装。
  • 便携式可执行文件。
  • 运行多个CPU /内核。
  • 先进的WebSockets技术–浏览器和服务器之间的交互式通信会话。
  • 支持自动把md转成HTML。
  • 完全支持最新的IPv6。
  • 以自定义格式创建日志。
  • 服务FastCGI,反向代理,重写和重定向,干净URL,Gzip压缩,目录浏览,虚拟主机和标题。
  • 适用于所有已知平台– Windows,Linux,BSD,Mac,Android。

是什么让Caddy与众不同?

  • Caddy附带了最新功能-HTTP/2,IPv6,Markdown,WebSockets,FastCGI,模板和其他现成的功能。
  • 无需安装即可运行可执行文件。
  • 具有最少技术描述的详细文档。
  • 开发时会考虑设计师,开发人员和Blogger的需求并使其轻松入门。
  • 支持虚拟主机–定义任意数量的站点。
  • 适合您–无论您的站点是静态的还是动态的。如果您是人类,那是给您的。
  • 您专注于实现目标,而不是实现目标。
  • 支持大多数平台– Windows,Linux,Mac,Android,BSD。
  • 通常,每个站点有一个Caddy文件。
  • 即使您是初学者,也可以在不到1分钟的时间内完成设置。

个人看法

caddy2与caddy1相比,caddy1对小白更友好一点。

安装caddy2服务器

安装命令

  • 01
  • 02
  • 03
  • 04
  • 05
dnf install 'dnf-command(copr)' dnf copr enable @caddy/caddy dnf install caddy

查看是否安装成功

  • 01
  • 02
caddy version

安装caddy Web服务器后,您可以使用以下systemctl命令启动,启用和检查服务状态。

  • 01
  • 02
  • 03
  • 04
  • 05
sudo systemctl daemon-reload systemctl start caddy systemctl enable caddy systemctl status caddy systemctl reload caddy

caddy2配置文件为/etc/caddy/Caddyfile,如果里边默认配置不用的话,编辑时可把默认的配置先注释掉

language
  • 01
vim /etc/caddy/Caddyfile

我这主要是用里边的反向代理和重定向与https配置(ssl)

language
  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
https://www.****.***{ encode gzip tls ****.pem ****.key reverse_proxy 127.0.0.1:**** } http://www.****.*** { redir https://www.****.***{url} } https://****.*** { redir https://www.****.***{url} } http://****.*** { redir https://www.****.***{url} }

修改完毕重新加载配置

  • 01
systemctl reload caddy

上边也提到了,Caddy是唯一一个可以使用Let's Encrypt自动获取和更新SSL/TLS证书的Web服务器。

我们如果需要很简单配置https的话

  • 01
  • 02
  • 03
  • 04
  • 05
https://www.****.***{ encode gzip tls youremail@**.com #你的邮箱地址---自动申请证书,必须在外网,且80可访问 reverse_proxy 127.0.0.1:**** }

注意

如果不写端口 默认会自动使用SSL证书,并且端口号为443
就算写了端口号,只要不是80,也会使用SSL证书。
注意一个域名下的子域名都是可以申请证书的,但是第一个申请的速度较快,后续的会稍慢点。因为这个原因我差点以为它一个域名只能申请一个。

如果不想用ssl证书,是用http访问的话

  • 01
  • 02
  • 03
  • 04
www.***.***:80 { root * /data/*** file_server }

  • 01
  • 02
  • 03
  • 04
http://www.***.*** { root * /data/*** file_server }

  • 01
  • 02
  • 03
  • 04
http://www.***.*** { root * /data/*** file_server }

自定义SSL证书

  • 01
  • 02
  • 03
  • 04
  • 05
www.psvmc.cn { root * /data/myblog tls /etc/caddy/cert/psvmc.pem /etc/caddy/cert/psvmc.key file_server }

同时映射多个地址

  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
localhost:8888, psvmc.cn, www.psvmc.cn { root * /data/myblog tls /etc/caddy/cert/psvmc.pem /etc/caddy/cert/psvmc.key file_server }

反向代理

  • 01
  • 02
  • 03
www.psvmc.cn { reverse_proxy localhost:9000 }

负载均衡

  • 01
  • 02
  • 03
  • 04
  • 05
www.psvmc.cn { reverse_proxy localhost:9000 localhost:9001 { lb_policy first } }

Websocket反向代理

  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
ws.psvmc.cn { ## HTTP 代理配置 ## 此时访问 ws.psvmc.cn,实际访问的是 127.0.0.1:8080/app/ 的内容 reverse_proxy / 127.0.0.1:8080/app/ ## WebSocket 代理配置 ## 客户端请求的 wss://ws.psvmc.cn/ws, 实际为 wss://127.0.0.1:8080/ws reverse_proxy /ws 127.0.0.1:8080 }

跨域访问

  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
(cors) { @origin header Origin {args.0} header @origin Access-Control-Allow-Origin "{args.0}" header @origin Access-Control-Request-Method GET } www.psvmc.cn { import cors www.baidu.com }

部分参考https://www.psvmc.cn/article/2021-02-22-caddy-01.html