什么是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服务器

安装命令

dnf install 'dnf-command(copr)' 

dnf copr enable @caddy/caddy 

dnf install caddy 

查看是否安装成功

caddy version

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

sudo systemctl daemon-reload
systemctl start caddy  
systemctl enable caddy  
systemctl status caddy 
systemctl reload caddy 

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

 vim /etc/caddy/Caddyfile 

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

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}
}

修改完毕重新加载配置

systemctl reload caddy

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

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

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

注意

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

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

www.***.***:80 {
	root * /data/***
	file_server
}

http://www.***.*** {
	root * /data/***
	file_server
}

http://www.***.*** {
	root * /data/***
	file_server
}

自定义SSL证书

www.psvmc.cn {
	root * /data/myblog
	tls /etc/caddy/cert/psvmc.pem /etc/caddy/cert/psvmc.key
	file_server
}

同时映射多个地址

localhost:8888,
psvmc.cn,
www.psvmc.cn {
	root * /data/myblog
	tls /etc/caddy/cert/psvmc.pem /etc/caddy/cert/psvmc.key
	file_server
}

反向代理

www.psvmc.cn {
	reverse_proxy localhost:9000
}

负载均衡

www.psvmc.cn {
	reverse_proxy localhost:9000 localhost:9001 {
		lb_policy first
	}
}

Websocket反向代理

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
}

跨域访问

(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