首页 > 其他分享 >Caddy 入门实战(2)--简单使用

Caddy 入门实战(2)--简单使用

时间:2023-08-13 11:12:02浏览次数:35  
标签:http 入门 -- ca Caddy server pem key 10.49

本文主要介绍 Caddy 的实际使用,配置 Caddy 使用 Caddyfile + CLI 的方式;文中所使用到的软件版本:Centos 7.9.2009、Caddy 2.4.6。

1、配置日志

{
    log {
        output file /home/mongo/soft/caddy_2.6.4/caddy.log
        level INFO
        format console {
            time_local
            time_format wall_milli
        }
    }
}

这里是在全局选项(只能位于 Caddyfile 的顶部)里配置日志,也可以在站点里配置日志。

output:日志输出位置,可以为:stderr、stdout、discard、file,默认为:stderr
level:日志级别
format:日志格式化,可以为:console、json、filter(包裹另一个编码器模块,允许每个字段的过滤)
time_local:使用本地时间
time_format:时间格式,wall_milli 格式:2006/01/02 15:04:05.000

2、静态文件

:8081 {
    root * /home/mongo/mysite #针对所有请求设置网站的根目录为:/home/mongo/mysite
    file_server /static/* browse { #只针对 /static/* 请求的静态文件配置
        hide .git
        index index.html
    }
}

browse:对没有索引文件的目录的请求,启用文件列表。
hide:设置要隐藏的文件或文件夹
index:索引文件列表,默认为:index.html index.txt

3、反向代理

http://10.49.196.33:8082 {
    reverse_proxy * http://10.49.196.31:8080
}

:8083 {
    reverse_proxy /api/* {
        to http://10.49.196.31:8080 http://10.49.196.32:8080
        lb_policy random
        health_uri /index.jsp
        health_interval 30s
        health_timeout 5s
        health_status 200
        fail_duration 30s
        max_fails 1
        unhealthy_latency 5s
    }
}

简单的代理可以写在一行上,如:端口 8082;细粒度的代理配置可以放到一个块中,如:端口 8083。

参数说明:

to:代理的上游地址列表
lb_policy:负载均衡算法
health_uri:主动健康检查的 URI 地址
health_interval:主动健康检查的时间间隔
health_timeout:主动健康检查中,后端服务的超时时间(超过该时间认为服务不可用)
health_status:主动健康检查中,期望后端服务返回的状态码
fail_duration:被动健康检查中,记住一个失败请求的时间;从第一失败请求开始计时,超过该时间,重新计数失败的请求。
max_fails:被动健康检查中,fail_duration 内请求失败的最大次数,达到该值,认为后端服务不可用
unhealthy_latency:被动健康检查中,如果后端相应超过该时间,则认为请求失败

负载均衡有如下算法:

random:随机选择一个上游
random_choose <n>:随机选择两个或多个上游,然后选择负载最小的一个(n通常为2)。
first:根据配置中定义的顺序,选择第一个可用的上游
round_robin:依次轮询每个上游
least_conn:选择当前请求数最少的上游;如果有多个主机的请求数最少,那么就随机选择其中一个主机
ip_hash:将客户的 IP 映射到一个对应的上游
uri_hash:将请求的URI(路径和查询)映射到一个对应的上游。
header [field]:通过散列头的值,将请求头映射到一个对应的上游;如果指定的头字段不存在,将随机选择一个上游。
cookie [<name> [<secret>]]:在客户端第一次请求中,随机选择一个上游,并在响应中添加 Cookie(如果没有指定,默认 cookie 名称为 lb)。Cookie 的值是所选上游的拨号地址,用 HMAC-SHA256 加  密。在随后的请求中,根据 cookie 值映射到对应的上游。

4、Https

4.1、自动 Https

4.1.1、激活自动 Https

当监听地址中包含域名或 IP 时,Caddy 会激活自动 Https,自动生成相关的证书;如:

10.49.196.33:8084 {
    reverse_proxy * http://10.49.196.33:8081
}

Caddy 还会启动一个 http 的端口(默认:80),访问该端口会重定向到 Https 端口。由于普通用户没有启动 80 端口的权限,可以禁用重定向功能;在全局选项中新增配置:

{
  auto_https disable_redirects
}

或者修改 80 端口为普通端口,在全局选项中新增配置:

http_port 8080

4.1.2、禁用自动 Https

A、在全局选项中设置 auto_https 为 off

{
  auto_https off
}

B、监听地址中不提供任何域名或 IP

:8081 {
    reverse_proxy * http://10.49.196.31:8080
}

C、指定协议

http://10.49.196.33:8082 {
    reverse_proxy * http://10.49.196.31:8080
}

http://:8083 {
    reverse_proxy * http://10.49.196.31:8080
}

D、手动加载证书

10.49.196.33:8085 {
    reverse_proxy * http://10.49.196.31:8080
    tls ssl/server.pem ssl/server.key
}

4.2、使用自定义证书

4.2.1、创建证书

A、生成根证书

openssl genrsa -out ca.key
openssl req -new -key ca.key -out ca.csr
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.pem

B、生成服务端证书

openssl genrsa -out server.key
openssl req -new -key server.key -out server.csr
openssl ca -days 3650 -in server.csr -cert ca.pem -keyfile ca.key -out server.pem

C、生成客户端证书

openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -days 1500 -in client.csr -cert ca.pem -keyfile ca.key -out client.pem
openssl pkcs12 -export -clcerts -in client.pem -inkey client.key -out client.p12

使用 OpenSSL 创建证书的详细说明可参考:OpenSSL 介绍(5)--数字证书;这里生成的证书假设都存放在 $CADDY_HOME/ssl 目录下($CADDY_HOME 为 Caddy 的安装目录)。

4.2.2、Caddy 中配置自定义证书

A、无需客户端认证

10.49.196.33:8085 {
    reverse_proxy * http://10.49.196.31:8080
    tls ssl/server.pem ssl/server.key
}

B、需要客户端认证

www.abc.com:8086 {
    reverse_proxy * http://10.49.196.31:8080
    tls ssl/server.pem ssl/server.key {
        client_auth {
            mode require_and_verify
            trusted_ca_cert_file ssl/ca.pem
        }
    }
}

客户端访问时需要使用客户端证书(client.p12)来访问;浏览器访问导入该证书即可,Java 客户端的访问可参考:Java调用Http/Https接口(2)--HttpURLConnection/HttpsURLConnection调用Http/Https接口。上述配的是个无效的域名,可以通过修改 hosts 文件来访问:  

10.49.196.33 www.abc.com

访问效果如下:

注意:这里监听地址里配置的是域名,不能配置为 IP,否则会报如下错误:

strict host matching: TLS ServerName () and HTTP Host (10.49.196.33) values differ

 

标签:http,入门,--,ca,Caddy,server,pem,key,10.49
From: https://www.cnblogs.com/wuyongyin/p/17522130.html

相关文章

  • Extended Kalman Filter vs. Error State Kalman Filter for Aircraft Attitude Estim
    EKF与ESKF的对比“Engineerscansolveexactproblemsusingnumericalapproximations,ortheycansolveapproximateproblemsexactly"-FredDaum.对出现在实际问题中的非线性的运动学(dynamic)模型以及/或非线性的观测方程进行线性化的操作,然后基于这个线性化的方程计算......
  • 周总结5
    1、java的三大平台分别为javaSE、javaEE、javaME,其中javaSE是基础。2、javaSE由四部分组成,分别为JVM、JRE、JDK、java语言。3、java不仅是一门程序语言,还是一种标准,我认为,这种标准体现在它可以JYM平台实现跨平台的功能。JCP是一个组织,JSR为一种提交文件的方式,其目的可以理......
  • 树栈
    父节点从本节点,向上直到根节点的栈列表。为每个新生成的节点保存这样一个列表,方便传递参数。如果层数固定可以用元组表示:比如:打开的Excel文件,Excel应用程序哥节点:本节点,加上同层的哥哥节点前一个节点,直到最前的节点。......
  • 鲜花。
    最近看了好多NOI游记,想了很多事情,感觉挺有意义的,而且觉得我这个脑子可能很快就忘掉了,于是有了这篇闲话(现在记得也不是很清楚。跟我比较熟的大概都知道我经常发电,我总是怀疑自己,觉得自己很菜,害怕失败,害怕辜负了那些人的期望,喜欢嘲讽自己快别学了。但什么才算是真正的失败呢。......
  • [算法考研笔记]mm算法随笔[成绩划分][回溯0-1][得分][字段和][聪明小偷][股票买卖]
    mm算法随笔学习笔记(回溯算法)回溯<---->递归1.递归的下面就是回溯的过程回溯法是一个纯暴力的搜索、有的时候暴力求解都没有办法,用回溯可以解决。回溯法解决的问题:组合问题如:1234两两组合切割问题如:一个字符串有多少个切割方式,或者切割出来是回文子集问题:1......
  • C++中的类1
    一、初始化列表初始化列表是在C++类的构造函数中使用的一种特殊语法。它允许在对象创建时对成员变量进行初始化。通常,在构造函数的函数体中,我们会使用赋值操作符(=)来对成员变量进行初始化。然而,初始化列表提供了一种在构造函数签名之后的初始化成员变量的方式。初始化列表使用......
  • 数据库设计中的数据字典和平时开发中用到的字典表,有什么区别
    数据字典(DataDictionary):数据字典是数据库设计的一部分,它是一份关于数据库中各种数据元素的信息文档,包括表、列、数据类型、索引、约束、视图等等。数据字典记录了数据库结构的元数据,描述了数据的定义、用途、关系以及数据的业务含义。数据字典通常由数据库管理员(DBA)或设计者创......
  • Linux下C语言调用libcurl库获取天气预报信息
    一、概述当前文章介绍如何在Linux(Ubuntu)下使用C语言调用libcurl库获取天气预报的方法。通过HTTPGET请求访问百度天气API,并解析返回的JSON数据,可以获取指定城市未来7天的天气预报信息。二、设计思路【1】使用libcurl库进行HTTPGET请求在代码中包含<curl/curl.h>头文件,以便使用libc......
  • 深入理解JavaScript正则表达式:释放其强大力量
    深入理解JavaScript正则表达式:释放其强大力量正则表达式是一种强大的工具,用于在字符串中搜索、匹配和替换特定的模式。在JavaScript中,正则表达式是一种内置的功能,可以帮助开发人员处理各种字符串操作。本文将深入探讨JavaScript正则表达式的原理、语法和应用场景,帮助读者充分理解......
  • 基于瑞萨RA6M5的环境监测系统设计
    基于瑞萨RA6M5的环境监测系统设计1.设计简介本项目是基于启明6M5开发板完成了环境监测系统设计,传感器DHT11获取温度湿度的数据;传感器GY39获取光照强度数据;0.96寸OLED屏幕提供显示功能,能够显示传感器数据以及相关信息。编写上位机软件,实现温湿度传感器数据的上报。2.设计框架3.项......