Caddy轻松让HTTP端口实现TLS加密

0. 简介

Caddy官网地址

Automatic HTTPS:
Caddy automatically enables HTTPS for all your sites, given that some reasonable criteria are met:

The hostname:
    is not empty
    is not localhost
    is not an IP address
    has no more than 1 wildcard (*)
    wildcard must be left-most label
The port is not explicitly 80
The scheme is not explicitly http
TLS is not turned off in site's definition
Certificates and keys are not provided by you
Caddy is able to bind to ports 80 and 443 (unless you use the DNS challenge)
Caddy will also redirect all HTTP requests to their HTTPS equivalent if the plaintext variant of the hostname is not defined in the Caddyfile.
1. 介绍
Caddy是基于Go语言编写,安装到Linux上无需任何依赖库,必须拷贝一个Caddy的可执行文件就可以开启一个静态的HTTP站点,由于这种轻量小巧静态的特性,特别适合配合一些小型应用使用。比如配合Aria2实现远程下载,配合munin实现服务器状态监控,还可以在关健时刻用来测试服务器端口是否通畅。caddy除了可以做一个静态的HTTP服务器之外,还可以像nginx一样做一个反向代理服务器。虽然性能不比NGINX,但是好处也有不少:

1、配置文件简单,1行就可以搞定一个反向代理服务器

2、安装部署方便,只要拷贝一个文件就可以了

3、如果联网,支持全自动的获得一个Let's Encrypt签发的免费HTTPS证书并自动配置上去,而且这是默认执行的,只需把自己的域名写在配置文件里就可以。

4、如果没联网,只需一行就可以签发一个自签名证书,一行升级到HTTPS呦。

5、日志文件与NGINX很像,很详细。

所以非常适合用于一些应急场合,比如有个站点或者某个端口突然要从HTTP改成HTTPS实现加密传输,有了Caddy之后一分钟以内就可以搞定。
2. 使用场景
场景一:公网上的服务器,已经有了域名,并且该域名就指向该服务器。想免费升级到HTTPS
建立一个文件,名字交Caddyfile,按照下面这样写:

www.xiangchuxing.cn {
  gzip
  proxy / http://127.0.0.1:18080 {
      transparent
      insecure_skip_verify
  }
}

第一行填写域名,有了这个域名之后,caddy就会向Let's Encrypt 发送这个域名,并且进行验证。
然后caddy就会自动申请HTTPS证书,开启80和443端口并进行侦听。

注意:只要写上了域名那么就默认开启了HTTPS服务,无需指定Caddy也会监听到443和80端口上。

最后一行proxy的/是反向代理的范围,/表示全部反向代理,/api表示只有访问www.xiangchuxing.cn/api的时候才进行反向代理。proxy语句可以写多行,分别对应不通的url地址。

执行之后,程序就会自动向Let's Encrypt请求,然后Let's Encrypt会验证你的域名对应的80和8080端口
是否通向你当前的服务器,然后签发证书交给Caddy,一切都是自动的,需要你填写一个邮箱用于加密.下面是一部分,由于没有备案所80端口被运营商锁死,所以我的机器还不能注册HTTPS域名
场景二:在上面的基础上想添加日志记录
让Caddy像NGINX一样记录访问日志。只需在下面加上日志的配置语句即可
www.xiangchuxing.cn {
  gzip
  log stdout
  proxy / http://127.0.0.1:18080 {
      transparent
      insecure_skip_verify
  }
}
场景三:内网机器,无需连到公网,只是想利用HTTPS来避免明文的传送,这是可以使用Caddy的自签名功能,Caddy自己制作CA证书,然后用这个CA证书签发相应的公钥和私钥。这样虽然使用浏览器会报错证书不够信任,但是达到了密文传输的效果
www.xiangchuxing.cn {
  gzip
  tls self_signed
  log stdout
  proxy / http://127.0.0.1:18080 {
      transparent
      insecure_skip_verify
  }
}
第一行的域名可以随便写,但是不要写localhost,关健 一句就在于 tls self_signed。有了这一行便会产生自签名证书。
同样也可以像场景2那样加入log的配置来产生日志文件。

注意如果使用了自签名,那么在启动Caddy要手动指定端口到443

caddy -port 443
如果不想使用443端口,那么也可以手动指定:
caddy -port 4430
示例如下:

Caddyfile 配置文件

www.xiangchuxing.cn {
  gzip
  log stdout
  proxy / http://127.0.0.1:18080 {
      transparent
      insecure_skip_verify
  }
}

https://www.xiangchuxing.cn:8080 {
  gzip
  log stdout
  proxy / http://127.0.0.1:8081 {
      transparent
      insecure_skip_verify
  }
}

https://www.xiangchuxing.cn:8089 {
  gzip
  log stdout
  proxy / http://127.0.0.1:18089 {
      transparent
      insecure_skip_verify
  }
}

docker-compose.caddy.yml 文件

version: "3"
services:
  caddy:
    image: doublemine/caddy:0.11.0
    restart: always
    container_name: caddy
    network_mode: host
    volumes:
      - "./Caddyfile:/etc/Caddyfile"
      - "/etc/caddy:/root/.caddy"
    command: --conf /etc/Caddyfile  --log stdout
    logging:
      driver: "json-file"
      options:
        max-size: "20M"
        max-file: "10"

本文由博客一文多发平台 OpenWrite 发布!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值