Caddy - Go 语言编写的开源WEB服务器 发表于 2020-06-06 | 分类于 GO | 暂无评论 Caddy https://caddyserver.com/ ## 1.Caddy介绍 在追求性能的道路上,nginx已经一骑绝尘。这种情况下诞生的 Caddy有什么特性呢? Caddy的作者Matt Holt有这样的理念: 其他Web Server为Web而设计,Caddy为human设计。可以看出Caddy主打易用性,使用配置简单。 Caddy 是用 Go 语言编写的开源、支持 HTTP/2 的 Web 服务器。 Caddy 最突出的功能就是自动为托管网站启用TLS。Caddy 会自动从 Let’s Encrypt 获取并更新 TLS 证书。 Caddy 也可以配置成为反向代理服务器,通过 Apache 2许可协议发行。 得益于Go的跨平台特性,Caddy很容易的支持了三大主流系统:Windows、 Linux、Mac。 ## 2.Caddy Web服务器的特性: 1)HTTP/1.1 和 HTTP/2 协议支持 2)HTTPS 自动启用 TLS 3)支持虚拟主机 4)原生 IPv4 和 IPv6 支持 5)反向代理 6)负载均衡支持 7)Gzip 内容压缩 8)Caddy 对WebSockets有很好的支持 9)合理使用多核,得益于go的特性 ## 3.CentOS 7 系统安装 Caddy #### 3.1 安装 Caddy 由于 Caddy 是由 Go 语言开发,直接下载程序包解压后即可运行,虽然可以正常使用,但是过程比较麻烦。使用如下命令也可以安装最新版的 Caddy: ```shell # curl https://getcaddy.com | bash -s personal ``` 由于 Caddy 是针对个人用户免费,所以加入了"personal"选项,脚本执行完成后,Caddy 就安装安装成功了。 脚本其实就是帮我们下载对应操作系统最新版的 Caddy 可执行文件,然后把它解压到"/usr/local/bin"目录里。其配置文件需要自己添加。Caddy 的配置文件叫作"Caddyfile",习惯上把它放置在"/etc/caddy"目录。 #### 3.2 创建用户及配置目录 为安全起见,Web 服务器一般不使用 root 用户来启动,所以需要创建一个 "caddy"用户,来启动 Caddy Web 服务器。全部命令如下所示: ```shell # mkdir /var/www //创建网站根目录 # adduser -r -s /sbin/nologin -d /var/www caddy //创建启动 Caddy 用户 # chown caddy:caddy /var/www //修改网站根目录属主 # mkdir /etc/caddy //创建配置文件目录 # touch /etc/caddy/Caddyfile //创建配置文件 # chown -R root:caddy /etc/caddy //修改配置文件属主 # mkdir /etc/ssl/caddy //创建证书文件目录 # chown -R caddy:root /etc/ssl/caddy //修改 Caddy 证书目录属主 # chmod 0770 /etc/ssl/caddy //修改 Caddy 证书目录权限 ``` 完成以上准备工作后,理念上 Caddy 就可以正常运行了。可以试着执行一下"caddy"命令,会提示服务器启动并且侦听了"2015"端口,浏览器打开的话会得到"404 Not Found",说明 Web 服务器已经可以工作了,只是需要配置一下让它符合我们的要求。 #### 3.3 为 Caddy 创建 systemd 服务 直接使用命令启动 Caddy 多少有些不方便,还好官方提供了一个添加 systemd 服务的配置文件,按其配置文件添加服务后,Caddy 就可以按照我们预先的设计来工作了。配置文件为"/usr/lib/systemd/system/caddy.service",内容如下: ```shell [Unit] Description=Caddy HTTP/2 web server Documentation=https://caddyserver.com/docs After=network-online.target Wants=network-online.target systemd-networkd-wait-online.service [Service] Restart=on-abnormal StartLimitIntervalSec=14400 StartLimitBurst=10 User=caddy Group=caddy Environment=CADDYPATH=/etc/ssl/caddy ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp ExecReload=/bin/kill -USR1 $MAINPID KillMode=mixed KillSignal=SIGQUIT TimeoutStopSec=5s LimitNOFILE=1048576 LimitNPROC=512 PrivateTmp=true PrivateDevices=false ProtectHome=true ProtectSystem=full ReadWritePaths=/etc/ssl/caddy ReadWriteDirectories=/etc/ssl/caddy [Install] WantedBy=multi-user.target ``` 至此,Caddy 服务已经添加成功。 #### 3.4 Caddyfile 文件中添加 Web 服务器 Caddy 的配置文件添加 Webt 服务器非常容易,只需要指定 HTTP 路径即可。根据之前的设定,我们添加一个 Web 服务器: ```shell http:// { root /var/www gzip } ``` 配置内容也很好理解,就是设置侦听的虚拟目录和网站的实际目录,并且启用 gzip 压缩。 根据配置项,我们在网站实际目录添加一个index.html文件,大致内容如下: ```shell Hello World Hello World ``` 再通过浏览器打开网站,就可以看到我们预告设定的首页了。 #### 3.5 Caddy 服务器配置 TLS 自动 TLS 是 Caddy Web服务器的独特功能,可将 Caddy 与其他 Web服务器区分开。 如果配置了自动TLS,则 Caddy Web 服务器会自动从 Let’s Encrypt(一个免费,自动和开放的证书颁发机构)请求并续订TLS证书。 Caddy 配置自动证书也非常简单,只需要编辑 Caddyfile 加入自动TLS即可: ```shell caddy.daehub.com { root /var/www gzip tls service@daehub.com } ``` 需要强调的是: 1)由于 Let’s Encrypt 的工作机制要求,caddy.daehub.com 需要为互联网实际注册的域名 2)tls 指令后面为获取 Let’s Encrypt 证书时使用的邮箱,可以自行设置 3)tls 指令会通知 Caddy 服务进程使用 Let’s Encrypt 证书来启动 HTTPS服务。 ## 4. 其他配置 #### 4.1 目录浏览功能 ```shell caddy.daehub.com { gzip root /var/www/download browse } ``` #### 4.2 透明代理 ```shell caddy.daehub.com { gzip proxy / localhost:port { transparent } } ``` #### 4.3 日志格式 ```shell log requests.log "{remote} {when} {method} {uri} {proto} {status} {size} {>User-Agent} {latency}" { rotate_size 50 # Rotate after 50 MB rotate_age 90 # Keep rotated files for 90 days rotate_keep 20 # Keep at most 20 log files } ``` #### 4.4 地址跳转 ```shell http://www.mysite.com { redir https://mysite.com } ``` #### 4.5 内网证书自签名 ```shell www.mysite.com gzip tls self_signed proxy / localhost:8080 ``` 参考文档 >https://blog.csdn.net/lvshaorong/article/details/78065178 >https://www.xargin.com/migrate-from-nginx-to-caddy/ >http://www.voidcn.com/article/p-ewdgmqpj-ug.html >https://www.daehub.com/archives/8498.html