什么是Caddy

Caddy是一个强大的、可扩展的平台,可以为您的站点、服务和应用程序提供服务,它是用Go编写的。虽然大多数人使用它作为web服务器或代理,但其实他支持更多的功能:

  • Caddy是唯一自动且默认使用HTTPS的web服务器。
  • web服务器
  • 反向代理
  • sidecar代理
  • 负载均衡器
  • API网关
  • ingress控制器
  • 系统管理器
  • 进程supervisor
  • 任务调度器
  • (任何长时间运行的进程long-running process)
  • 简单的配置与Caddyfile
  • 强大的配置和它的原生JSON配置
  • 使用JSON API进行动态配置
  • 如果不喜欢JSON,配置适配器
  • 默认自动HTTPS,让我们加密公共站点,内部名称和ip的全托管本地CA,可以与集群中的其他Caddy实例协调吗
  • 避免其他服务器由于TLS/OCSP/与证书相关的问题而宕机时
  • HTTP/1.1、HTTP/2和实验性HTTP/3支持
  • 高度可扩展的模块化架构让Caddy做任何事情都不会臃肿
  • 在任何没有外部依赖的地方运行(甚至libc也不行)
  • 用Go编写,一种比其他服务器具有更高内存安全保证的语言

简化的外部依赖

Caddy简化了你的基础设施。它负责TLS证书更新、OCSP绑定、静态文件服务、反向代理、Kubernetes访问等。

它的模块化架构意味着您可以使用为任何平台编译的单个静态二进制文件做更多的事情。

Caddy在容器中运行得很好,因为它没有依赖项—甚至libc也没有。几乎在任何地方都能运行Caddy。

一流的安全

Caddy是唯一自动且默认使用HTTPS的web服务器。

Caddy为您的站点自动获取和更新TLS证书。它甚至会固定OCSP响应。其新颖的证书管理功能是同类产品中最成熟、最可靠的。

用Go编写的Caddy提供了比用c编写的服务器更大的内存安全性。

文件服务器和代理

Caddy是一个灵活、高效的静态文件服务器,也是一个强大的、可伸缩的反向代理。

使用它来为您的静态站点提供压缩、模板评估、Markdown呈现等服务。

或者将其用作任意数量后端的动态反向代理,包括主动和被动健康检查、负载平衡、断路、缓存等等。

下载和安装

下载非常简单:

wget "https://github.com/caddyserver/caddy/releases/latest/download/ASSET"
docker pull caddy
如果需要安装为service,参考https://caddyserver.com/docs/install

零配置文件服务器

启动当前目录为文件服务器:
caddy file-server
启动当前目录为文件服务器,且支持https:
caddy file-server --domain example.com
方向代理:
caddy reverse-proxy --from example.com --to localhost:9000
使用mysite目录:
caddy file-server --root ~/mysite

Caddy通过配置文件运行

启动server,且支持https,反向代理,压缩,和模板

example.com  

# Templates give static sites some dynamic features
templates # Compress responses according to Accept-Encoding headers
encode gzip zstd # Make HTML file extension optional
try_files {path}.html {path} # Send API requests to backend
reverse_proxy /api/* localhost:9005 # Serve everything else from the file system
file_server

caddy同一服务器支持多个域名

mysite.com {
root /www/mysite.com
} sub.mysite.com {
root /www/sub.mysite.com
gzip
log ../access.log
}

参考

https://caddyserver.com/

https://github.com/caddyserver/caddy

Caddy一个强大的web服务器和代理服务器的更多相关文章

  1. 自己动手模拟开发一个简单的Web服务器

    开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...

  2. 一个简单的web服务器

    写在前面 新的一年了,新的开始,打算重新看一遍asp.net本质论这本书,再重新认识一下,查漏补缺,认认真真的过一遍. 一个简单的web服务器 首先需要引入命名空间: System.Net,关于网络编 ...

  3. [置顶] 在Ubuntu下实现一个简单的Web服务器

    要求: 实现一个简单的Web服务器,当服务器启动时要读取配置文件的路径.如果浏览器请求的文件是可执行的则称为CGI程序,服务器并不是将这个文件发给浏览器,而是在服务器端执行这个程序,将它的标准输出发给 ...

  4. (一)一个简单的Web服务器

    万丈高楼平地起,首先我们必须了解 超文本传输协议(HTTP) 以后才能够比较清晰的明白web服务器是怎么回事. 1. 浅析Http协议 HTTP是一种协议,允许web服务器和浏览器通过互联网进行来发送 ...

  5. Tomcat剖析(一):一个简单的Web服务器

    Tomcat剖析(一):一个简单的Web服务器 1. Tomcat剖析(一):一个简单的Web服务器 2. Tomcat剖析(二):一个简单的Servlet服务器 3. Tomcat剖析(三):连接器 ...

  6. 自己模拟的一个简单的web服务器

    首先我为大家推荐一本书:How Tomcat Works.这本书讲的很详细的,虽然实际开发中我们并不会自己去写一个tomcat,但是对于了解Tomcat是如何工作的还是很有必要的. Servlet容器 ...

  7. 利用 nodeJS 搭建一个简单的Web服务器(转)

    下面的代码演示如何利用 nodeJS 搭建一个简单的Web服务器: 1. 文件 WebServer.js: //-------------------------------------------- ...

  8. 《深度解析Tomcat》 第一章 一个简单的Web服务器

    本章介绍Java Web服务器是如何运行的.从中可以知道Tomcat是如何工作的. 基于Java的Web服务器会使用java.net.Socket类和java.net.ServerSocket类这两个 ...

  9. 一个简单的Web服务器-支持Servlet请求

    上接 一个简单的Web服务器-支持静态资源请求,这个服务器可以处理静态资源的请求,那么如何处理Servlet请求的呢? 判断是否是Servlet请求 首先Web服务器需要判断当前请求是否是Servle ...

  10. 一个简单的Web服务器-支持静态资源请求

    目标 实现一个简单的Web服务器,能够根据HTTP请求的URL响应对应的静态资源,如果静态资源不存在则响应404. HttpServer 使用ServerSocket实现的一个服务器,request根 ...

随机推荐

  1. C# 文件分割和文件合并

    C# 文件分割和文件合并 void SplitFile() { string sourceFile = "Old.mp4"; // 源文件路径 string outputFile1 ...

  2. WPF create Flower shape

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. MyBatis的深入原理-架构设计以及实例分析

    MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例, ...

  4. 056_带标签的break和continue 057_方法的定义_形参_实参_返回值_语句块 058_方法的重载overload 059_递归算法详解_递归和迭代效率测试

    056_带标签的break和continue(替代被取消的goto语句) 加个计数器: /** * 带标签的Break和Continue * * @author * */public class Te ...

  5. oracle使用存储过程返回游标实现报表查询

    最近在oracle中通过存储过程实现一个报表查询,查询涉及到数据计算这里使用了临时表和存储过程实现输出查询,java接受游标变量返回结果集 第一步.创建统计使用的临时表 CREATE GLOBAL T ...

  6. java中匿名类,Bean规范,全局变量

    实现看见一个人,我们对它说hello public class study01 { public static void main(String[] args) { Me me = new Me(); ...

  7. 开源接流:一个方法搞定3D地图双屏联动

    老大提需求:一份数据,在2D地图上可编辑,在3D地图上显示高度信息,关键是两个地图得支持视图同步,末了还来句"两天时间够了吧?"我饶了饶头,内心各种问候...,代码如何下手,特X的 ...

  8. 清华大学推出第三讲普通人如何抓住 DeepSeek 红利,普通人必备的免费AI手册!

    前言 在当今这个日新月异的时代,人工智能(AI)技术正以前所未有的速度改变着我们的生活.工作和社会结构.从智能手机上的语音助手到自动驾驶汽车,从医疗诊断到学术研究,AI的应用无处不在,它如同一股不可阻 ...

  9. MarkDown学习使用图片

    学习MarkDown使用

  10. Processing多窗口程序范例(二)

    多窗口范例(二),做一个划线生成图像的应用,最后结果: 子窗口划线,主窗口复制多个画布叠加并添加了旋转动画. 范例程序 主程序: package syf.demo.multiwindow2; impo ...