浅谈|WEB 服务器 -- Caddy

2018年03月28日 12:38:00 yori_chen 阅读数:1490 标签: caddyserverwebhttps反向代理 更多

个人分类: server
 

Caddy

Caddy服务器(或称Caddy Web)是一个开源的,使用 Go 编写,支持 HTTP/2 的 Web 服务端,说到Web 服务器,我们大多想到的是 Apache 和 Nginx,在拥有了强大的 Nginx 以后我们为什么还需要 Caddy?

官网:https://caddyserver.com

优点:
  • 自动支持HTTP/2协议
  • 使用 Let’s Encrypt 让你的站点全自动变成全站HTTPS,无需任何配置,当然您可以使用自己的密钥和证书
  • 得益于 Go 的特性,Caddy 只是一个小小的二进制文件,没有依赖,易于部署/使用 配置起来十分简便
  • 可以合理使用多核
  • Caddy 对 WebSockets 有很好的支持
  • 自动把 Markdown 转成 HTML
  • 完全支持最新的IPv6
  • 以自定义格式创建日志
  • 适用于所有已知的平台 - Windows,Linux,BSD,Mac,Android
缺点:

要说它的缺点,就是效率不如Apache、Nginx,因此对于以下几种还是十分友好的

推荐场景:
  • 作为 个人博客的 Server
  • 作为 静态页面的 WebServer
  • 反向代理,管理多个站点
  • 微服务 等等…

安装

Caddy 提醒定制化的下载,可以自由选择各种插件和平台,请前往官网: https://caddyserver.com/download 下载

一、一键脚本安装(非商业版本)1

curl https://getcaddy.com | bash -s personal

脚本执行完成后,执行 which caddy,可以看到 caddy 已被安装到了 /usr/local/bin/caddy;caddy -version 查看版本号

二、手动安装(需要商业许可证)

  • https://caddyserver.com/download 进入到 caddy 官网的下载界面,选择平台和插件
  • 然后使用下方 Direct link to download 内的链接即可
  • 解压之后用 cp 命令放到 /usr/local/bin/caddy 就完成了安装

运行

caddy

输入 caddy,然后打开浏览器输入: http://ip:2015 ,得到了一个404页面,Caddy 已经成功运行了

(1)、在无配置文件的情况下,Caddy 默认是映射当前程序执行的目录所有文件(即/usr/local/bin),因此可以创建一个文件:

touch index.html

echo "<h1>Hello Caddy...</h1>" >> index.html

刷新浏览器, Hello Caddy… 已经出现在页面上

(2)、默认情况下,Caddy 运行在 2015 端口,可以使用 Caddy 命令行工具来自定义运行端口

例:改为运行在80端口

caddy -port 80

其他帮助:

caddy -h

配置文件

一、Host网站配置

Caddy 的各种强大功能还得需要 Caddyfile 来体现,Caddy 不强制你把配置文件放到哪个特定文件夹,可以在任意目录放置我们的配置文件,通过命令行 caddy -conf 即可指定

创建配置文件(本文我们把配置文件放在/usr/local/bin/下)

touch /usr/local/bin/Caddyfile            #创建配置文件
chown -R root:www-data /usr/local/bin #设置目录数据权限

编辑 /usr/local/bin/Caddyfile 文件

echo -e ":80 {
root /usr/local/bin/www
}" > /usr/local/bin/Caddyfile
解释
这是一个最简单的 Host 网站配置
‘:80’表示将网站绑定至可以访问到本机的任意一个IP,暴露在80端口,也可以写成 ‘0.0.0.0:80’
root 参数则表示网站的根节点

通过 caddy -conf /usr/local/bin/Caddyfile 命令用Caddyfile配置文件方式运行Caddy

拓展配置
设置响应过期时间,启用 gzip, 指定各种日志的输出端等等
echo -e "0.0.0.0:80 {
root /usr/local/www/
timeouts none #响应过期时间 none - 不过期 60s - 1分钟过期
gzip #启用gzip
log /var/log/caddy/access.log #日志
errors /var/log/caddy/error.log #错误日志
}" > /usr/local/bin/Caddyfile

二、反向代理配置

echo -e ":80/api {
proxy / 127.0.0.1:8080/api {
transparent
}
}" > /usr/local/bin/Caddyfile
解释:
当浏览器收到所有包含:80/api 的请求都会自动转发到127.0.0.1:8080/api 这个地址
transparent 这个设置保证了转发不会在浏览器生成任何额外的 301 或者 302 请求

三、自动HTTPS

为已经绑定域名的服务器自动从 Let’s Encrypt 生成和下载 HTTPS 证书,支持 HTTPS 协议访问,你只需要将绑定的 IP 换成 域名 即可

echo -e "xxx.com {
root /var/www/html/
}" > /usr/local/bin/Caddyfile

运行Caddy,按照提示输入你的 Email 之后,Caddy 会自动帮你获取并启用 HTTPS 证书

Caddy 简单易用、自动 HTTPS ,此外 Caddy 还提供一大堆的插件供我们使用,是一款不错的 Web 服务器


  1. (1)、需要 curl 文件传输工具支持,如果出现 -bash: curl: command not found 请先安装 curl 
    (2)、You must specify a personal or commercial license; see getcaddy.com for instructions. – 您必须指定个人或商业许可证; 有关说明,请参阅 https://getcaddy.com 
    假设有非商业许可证,请使用: 
    curl https://getcaddy.com | bash -s personal 
    或者 
    wget -qO- https://getcaddy.com | bash -s personal 
    您购买了商业许可证,则必须设置您的帐户,环境变量中的ID和API密钥: 
    export CADDY_ACCOUNT_ID = ... 
    export CADDY_API_KEY = ... 
    然后使用: 
    curl https://getcaddy.com | bash -s commercial 

浅谈|WEB 服务器 -- Caddy的更多相关文章

  1. 浅谈web服务器的编写之http协议

    本书是介绍怎么编写一个Web服务器,而Web服务器是基于HTTP(HyperText Transfer Protocol)协议实现的,所以要实现一个Web服务器就必须了解HTTP协议,本章主要介绍HT ...

  2. 浅谈Web服务器和应用服务器的区别

    1Web服务器和应用服务器简介 通俗的讲,Web服务器传送页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods).确切一点,你可以说:Web服务器专 ...

  3. 【架构】浅谈web网站架构演变过程

    浅谈web网站架构演变过程   前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管 ...

  4. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

    1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...

  5. [原创]浅谈Web UI自动化测试

    [原创]浅谈Web UI自动化测试 Web UI自动化测试相信大家都不陌生,今天来谈谈这个,我最早接触自动化测试时大约是在2004年,2006年当时在腾讯财付通算是开始正式接触自动化测试,之所以是正式 ...

  6. 浅谈Web前后端分离的意义

    自然是有很大意义的.下面我可能说的比较多--方便题主能够更全面的了解为什么说是有有意义的.另外,本文是以Java的角度谈前后端分离.放心,大家一定会有种是我了,没错,的感觉. 一.先来明晰下概念 前后 ...

  7. 浅谈web网站架构演变过程

    前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶 ...

  8. 浅谈web网站架构演变过程(转)

    前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶 ...

  9. 浅谈Web网站的架构演变过程

    前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶 ...

随机推荐

  1. day4-课堂笔记

    变量 成员变量-构造方法里定义 self.xxx 使用:类内部: self.xxx 类外部: 先创建实例 实例.xxx 类变量 类定义下面直接定义 使用:类方法内 cls.xxx 类名.xxx sel ...

  2. Spring(十六)之MVC框架

    MVC 框架教程 Spring web      MVC 框架提供了模型-视图-控制的体系结构和可以用来开发灵活.松散耦合的 web 应用程序的组件.MVC 模式导致了应用程序的不同方面(输入逻辑.业 ...

  3. leetcode16—3 Sum Closet

    Given an array nums of n integers and an integer target, find three integers in nums such that the s ...

  4. HDU 1269 迷宫城堡(判断有向图强连通分量的个数,tarjan算法)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. jqgrid 设置行编辑为本地端编辑状态

    有时,我们需要在jqgrid表格中做编辑操作,而jqgrid默认是启动了行保存连接到服务器更新.此时,如果没有指定editurl的有效url值时会报错 有时,我们需要将编辑完的表格数据一次性提交保存( ...

  6. Ubuntu下搭建Ruby On Rails

    Ruby on Rails是一个非常高效的Web应用程序框架由David Heinemeier Hansson使用Ruby语言编写. 这是一个开源 Ruby 框架,用于开发数据库支持的Web应用程序. ...

  7. 复选框、单选框 jquery判断是否选中Demo

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="eachcheckbox.a ...

  8. [2016北京集训测试赛15]statement-[线段树+拆环]

    Description Solution 由于题目要求,将a[i]->b[i](边权为i)后所得的图应该是由森林和环套树组合而成. 假如是树形结构,所有的t[i]就直接在线段树t[i]点的dfs ...

  9. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

  10. js之浅拷贝与深拷贝

    浅拷贝:只会复制对象的第一层数据 深拷贝:不仅仅会复制第一层的数据,如果里面还有对象,会继续进行复制,直到复制到全是基本数据类型为止 简单来说,浅拷贝是都指向同一块内存区块,而深拷贝则是另外开辟了一块 ...