返回

Caddy:轻量级、易配置的Web服务端

比宝塔面板占用资源少,比Nginx容易配置

1.7更新:最近宝塔开始强制绑定手机了。对我倒是没太大影响。实际上宝塔主要还是提供了一个图形界面,其功能都可以用不同的程序实现,并且按需进行部署的话,消耗资源实际上要小一点。

简介

Caddy is a powerful, extensible platform to serve your sites, services, and apps, written in Go. If you’re new to Caddy, the way you serve the Web is about to change.

Caddy是一个强大、可拓展的平台,用于托管你的网站、服务和应用,用GO语言编写。如果你刚开始使用Caddy,你托管网站的方式即将改变。

Caddy是一个非常容易配置的Web服务端。支持很多拓展功能,原生支持https证书自动安装。

如果你刚开始建站,还处在使用宝塔面板的阶段,并且希望更进一步的了解网站配置,那么caddy可以作为你的下一步学习的对象。

此外,由于caddy舍去了图形界面,其资源占用要比宝塔面板更少。对于某些性能孱弱的服务器,或者某些只需执行单一功能,部署单一网站的服务器,是非常合适的(例如Hax)。

官网:Welcome — Caddy Documentation (caddyserver.com)

2安装

可以直接参考官方文档:Install — Caddy Documentation (caddyserver.com)

ubuntu

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

注意:我连续两次使用都出现了复制之后只执行第一行的情况,所以如果发现没安装上,检查一下是否完全执行了所有命令

centos

yum install yum-plugin-copr 

yum copr enable @caddy/caddy 

yum install caddy

常用命令

# 启动
systemctl start caddy
# 停止
systemctl stop caddy
# 重启
systecmtl restart caddy
# 开机自启
systemctl enable caddy
# 取消开机自启
systemctl disable caddy

配置

Caddy默认的配置文件为/etc/caddy/Caddyfile,默认配置如下:

# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace ":80" below with your
# domain name.

:80 {
	# Set this path to your site's directory.
	root * /usr/share/caddy

	# Enable the static file server.
	file_server

	# Another common task is to set up a reverse proxy:
	# reverse_proxy localhost:8080

	# Or serve a PHP site through php-fpm:
	# php_fastcgi localhost:9000
}

# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile
  • :80定义了一个站点,监听来自80端口的所有请求
  • root * /usr/share/caddy定义了站点根目录
  • file_server表示静态文件服务器,允许访问站点根目录下的文件

设置反向代理

配置文件:

XXX.kermsite.com:80 {
	reverse_proxy localhost:5700
}

XXX.kermsite.com:443 {
	reverse_proxy localhost:5700
}

#注意如果使用cloudflare做DNS的话应该两个端口都要开放,我也不太清楚倒是CF是用的80还是443

使用443端口可能会出现无法签发证书的情况,所以只用80是比较保险的。

http://status.kermsite.com:80 {
  root * /usr/local/ServerStatus/web
  encode gzip
  file_server
}

或者:

{
  experimental_http3
}
http://xxx.chrxw.com{
    encode gzip
    reverse_proxy http://localhost:8000
}

配置文件修改以后,使用命令systemctl restart caddy即可重启caddy,因为我的域名使用了HSTS,所以还是不能访问,还得配置TLS

配置文件分为两个部分,第一部分是全局配置,第二个是站点配置

  • experimental_http3表示启用QUIC支持,没啥用,纯好玩
  • encode gzip表示对响应启用Gzip压缩
  • reverse_proxy http://localhost:8000表示反代本地的8000端口

配置TLS证书

首先得有TLS证书,我放在/home/.caddy/目录下,权限设置:

# 修改文件属组
chown caddy:caddy /home/.caddy -R
# 去除其他用户的读写权限
chmod go-rwx /home/.caddy -R

配置文件修改成这样:

{
  experimental_http3
}
https://xxx.chrxw.com{
    encode gzip
    tls /home/.caddy/xxx_chrxw_com.pem /home/.caddy/xxx_chrxw_com.key
    reverse_proxy http://localhost:8000
}

配置文件修改以后,使用命令systemctl restart caddy即可重启caddy,如果一切顺利,已经支持HTTPS访问了。 如果还是访问不了,使用命令systemctl status caddy -l查看错误原因。

配置文件只是增加了TLS证书,然后把站点的访问协议改成了https

注意事项

配置不一定即时生效,尤其是配合cloudflare时。我连续几次在caddy写好文件,cf配置好解析之后仍然不能访问。

等一下子就好了。

附录

参考文章

  1. Caddy V2安装与配置反代 - Chr_小屋 (chrxw.com)
  2. Caddy - The Ultimate Server with Automatic HTTPS (caddyserver.com)

版权信息

本文原载于kermsite.com,复制请保留原文出处。

Built with Hugo
Theme Stack designed by Jimmy