Caddy

Caddy服务器（或称Caddy Web）是一个开源的，使用Golang编写，支持HTTP/2的Web服务端。它使用Golang标准库提供HTTP功能。

Caddy一个显著的特性是默认启用HTTPS。它是第一个无需额外配置即可提供HTTPS特性的Web服务器。

作者Matt Holt于2014年12月开始开发Caddy，并于2015年4月发布第一个版本。在发布后的一年里，它的下载量超过了20000次，并在GitHub上获得了4500个Star。

Caddy支持各种Web技术，提供静态编译的二进制文件，支持i386、amd64和ARM架构上的Windows、Mac、Linux、Android和BSD操作系统。

 功能 
Caddy可以提供各种网站技术，它也可以作为反向代理和负载均衡器。Caddy的大部分功能都以中间件的形式实现，并通过Caddyfile中的設定（用于配置Caddy的文本文件）进行控制。
 HTTP/1.1（原始的HTTP）以及HTTP/2（HTTPS的推荐连接方案）
 HTTPS，同时接受自动签发和手动管理
 TLS 1.2临时性支持（旧协议）
 SNI
 OCSP证书交换验证
 虚拟主机 (單一機器模擬多个站点工作)
 原生IPv4和IPv6支持
 静态文件分发
 平滑重启/重载
 反向代理（HTTP或WebSocket）
 负载均衡和健康性检查
 FastCGI支持
 配置文件模板
 Markdown渲染
 CGI通过WebSocket
 Gzip压缩
 简单服务器鉴权
 URL重写
 重定向
 文件浏览服务
 访问日志
 实验性QUIC支持

 安全 
Caddy免于很多已知的CVEs攻击（包括 Heartbleed、DROWN、POODLE和BEAST），另外，Caddy使用TLS_FALLBACK_SCSV以防止协议降级攻击。

2015年6月2日，版本0.7.1修复了Caddy简单服务器鉴权中间件中时间欺诈攻击的漏洞。

关于协议和密码套件，Caddy使用TLS 1.0-1.2，并且倾向于ECDHE ECDSA与AES256-GCM-SHA384，支持十几种不同的加密方式。Cloudflare已经使用了Caddy作为TLS 1.3的实现方案。

传统的特权降级无法工作在Golang程序上。 为了绑定低于1024的端口，Caddy必须使用root账户运行 (不建议) 或通过setcap给予低位端口使用权限（建议的）。并且，在将来的版本中会尝试使用非特级子进程运行。

Caddy没有自动启动HTTP Strict Transport Security，推荐通过Caddy的header配置启用HSTS。

 自动签发 HTTPS 
Caddy默认通过检查域名来启用HTTPS (通过ACME protocol检查域名并签发证书)，并且重定向HTTP请求到HTTPS。 它在启动期间根据需要签发证书，并在服务器的使用期间自动重签发。Let's Encrypt是默认的证书颁发机构，但用户可以自定义所使用的ACME CA，这在测试配置时是必要的。在2016年第一季度，有百分之二的Let's Encrypt证书是由Caddy签发的。

一个可选的配置允许Caddy在需要时签发一个证书「按需 TLS」使用这种方案时，用户必须指定可通过该方案配置的证书数量。当Caddy收到一个没有配置证书的请求时，它会自动通过ACME签发并配置，然后将证书存储于内存和硬盘。这个过程通常需要几秒钟的时间，并且受到限制。

当使用TLS，Caddy会自动切换会话密钥以保证安全性。

 參考資料 

 外部連結 



Category:自由跨平台軟體
Category:自由网络服务器软件
Category:反向代理
Category:用Go編程的自由軟件
Category:Linux代理服务器软件 
Category:Unix网络相关软件 
Category:Linux网络相关软件 
Category:自由代理服务器