Caddy 自动HTTPS 反向代理、重定向、静态页面 - docker版

news2024/11/26 16:54:05

简介

Caddy 是一个通用的、易于使用的 Web 服务器,具有以下特点:

快速: Caddy 使用 Go 语言编写,以高性能著称。
安全: Caddy 支持 HTTPS、自动证书生成、HTTP/2 等安全功能。
易用: Caddy 的配置文件简单易懂,易于配置。
功能丰富: Caddy 支持多种功能,包括反向代理、负载均衡、缓存、日志记录等。
Caddy 可以用于各种场景,包括:

托管静态网站
托管 Web 应用
作为反向代理
作为负载均衡器
Caddy 可以运行在各种操作系统上,包括 Linux、Windows、macOS 等。

Caddy 与 Nginx 对比

特性CaddyNginx
语言GoC
性能接近 Nginx较高
内存占用较低较低
安全性支持 HTTPS、自动证书生成、HTTP/2支持 HTTPS、HTTP/2
易用性配置文件简单易懂配置文件语法复杂
功能支持反向代理、负载均衡、缓存、日志记录等支持反向代理、负载均衡、缓存、日志记录等
插件支持支持
社区活跃度较高较高

Caddy 的优势:

快速:Caddy 使用 Go 语言编写,以高性能著称。
安全:Caddy 支持 HTTPS、自动证书生成、HTTP/2 等安全功能。
易用:Caddy 的配置文件简单易懂,易于配置。
社区活跃:Caddy 社区活跃,可以获得及时帮助。
Nginx 的优势:

性能:Nginx 性能较高,在高负载情况下表现稳定。
功能丰富:Nginx 支持多种功能,可以满足复杂的需求。
社区活跃:Nginx 社区活跃,可以获得及时帮助。
Caddy 的劣势:

性能:Caddy 的性能略逊于 Nginx。
功能:Caddy 的功能略少于 Nginx。
Nginx 的劣势:

易用性:Nginx 的配置文件语法复杂,学习曲线较陡。
总结:

Caddy 和 Nginx 都是优秀的 Web 服务器。Caddy 的优势在于快速、安全、易用,适合中小网站和对性能要求不高的场景。Nginx 的优势在于性能高、功能丰富,适合大型网站和对性能要求高的场景。

选择 Caddy 还是 Nginx 取决于你的具体需求:

如果你的网站对性能要求不高,并且希望快速、安全、易于部署,那么 Caddy 是一个不错的选择。
如果你的网站对性能要求高,并且需要丰富的功能,那么 Nginx 是一个不错的选择。

使用 - docker版本

由于是使用docker进行操作的,所以需要提前安装好docker。

下面我会从简单到困难的顺序进行操作。

hello world

hello world这个例子是从caddy的docker hub官网拿的。我的docker版本是25,我当前所在目录为/home/web/test

拉取镜像

docker pull caddy

在这里插入图片描述
第一步:创建index.html
创建index.html并写入内容hello world

echo "hello world" > index.html

在这里插入图片描述

第二步:启动容器

docker run -d --name=caddy -p 80:80 \
    -v $PWD/index.html:/usr/share/caddy/index.html \
    -v caddy_data:/data \
    caddy

在这里插入图片描述
第三步:测试

本地测试:curl http://localhost/,出现hello world表示成功。
在这里插入图片描述浏览器测试:浏览器窗口输入服务器IP
在这里插入图片描述测试成功。

配置IP访问的静态页面

配置IP访问的静态页面和上面hello world差不多。区别就是Caddyfile文件是使用自定义的,hello world是使用默认的Caddyfile。index.html文件就是静态页面。

由于上面已经启动了caddy容器,如果需要继续下去的话可以删除容器。

docker rm -f caddy

第一步:创建Caddyfile

vim Caddyfile

输入上面的命令之后,会进入vim编辑页面,按i键进入编辑模式,粘贴以下内容

http:// {
    root * /usr/share/caddy
    encode gzip
    file_server
}

在这里插入图片描述按Esc键后输入:wq回车保存退出。
在这里插入图片描述
第二步:编写静态页面内容

为了和hello world区分开来,改一下静态页面的内容。
改成如下所示:
在这里插入图片描述

第三步:运行容器

docker run -d --name=caddy -p 80:80 -p 443:443 -p 443:443/udp -v $PWD/Caddyfile:/etc/caddy/Caddyfile -v $PWD/index.html:/usr/share/caddy/index.html --restart=always caddy:latest

在这里插入图片描述第四步:测试

浏览器输入服务器IP。
在这里插入图片描述

配置带域名的静态页面

上面的还是通过IP的方式去访问静态页的。如何通过域名的方式去访问静态页呢?
只需在Caddyfile配置就行。

注意:小伙伴需要做测试学习,最好找一个国外的服务器,现在国内的服务器做域名解析需要备案才能使用。

下面是阿里云的通知:
在这里插入图片描述

第一步:修改Caddyfile
Caddyfile里面填写自己的域名,位置我有注释。

# Caddyfile 配置文件

# 全局配置

http:// {
  # 根目录,指向所有静态文件的根目录
  # 这里设置为 `/usr/share/caddy`
  root * /usr/share/caddy

  # 启用 gzip 压缩
  encode gzip

  # 启用文件服务器功能
  file_server
}

# 虚拟主机配置
# 下面的域名填写自己解析的域名 - 注意
caddy.xxxxx.fun {
  root * /usr/share/caddy
  # 启用 gzip 压缩
  encode gzip
  # 启用文件服务器功能
  file_server
}

为了区分我再次修改静态页面的内容
在这里插入图片描述

修改好之后直接重启caddy即可。
第二步:重启caddy

docker restart caddy

第三步:测试
在浏览器输入域名,回车。
在这里插入图片描述并且可以看到caddy为我们自动申请了证书。

在这里插入图片描述

配置带域名的反向代理

为了测试,我在服务器上启动了一个服务,http://localhost:19850/端口为19850,现在我需要使用caddy去反向代理到19850这个服务。
在这里插入图片描述

第一步:修改Caddyfile

配置中需要填写自己的服务器IP

# Caddyfile 配置文件

# 虚拟主机配置
# 下面的域名修改为自己的 - 注意
caddy.xxxxxxx.fun {
  # 反向代理配置
  # 将所有请求转发到 服务器IP:19850 地址 - 注意
  reverse_proxy 服务器IP:19850
  # 启用 gzip 压缩
  encode gzip
}

第二步:重启caddy

docker restart caddy

第三步:测试

可以看到通过caddy的反代,成功访问19850端口的服务。
在这里插入图片描述

配置带域名的重定向

第一步:修改Caddyfile

重定向到百度。

# Caddyfile 配置文件

# 虚拟主机配置

caddy.xxxx.fun {
  # 重定向所有请求到 https://baidu.com
  # 将请求的 URI 路径附加到 https://baidu.com 之后,并将其作为新的目标 URL 进行重定向
  redir https://baidu.com{uri}
}

重定向所有请求: 将所有请求重定向到 https://baidu.com。
{uri} 表示请求的 URI 路径。例如,如果请求的 URL 是 https://caddy.xxxx.fun/hello/world,那么 {uri} 的值为 /hello/world。
重定向后的 URL 将是 https://baidu.com{uri}。例如,如果请求的 URL 是 https://caddy.xxxx.fun/hello/world,那么重定向后的 URL 将是 https://baidu.com/hello/world。

第二步:重启caddy
第三步:测试

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1456753.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录刷题笔记-Day19

1. 二叉搜索树的最小绝对差 530. 二叉搜索树的最小绝对差https://leetcode.cn/problems/minimum-absolute-difference-in-bst/ 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝…

Git基本操作(超详细)

文章目录 创建Git本地仓库配置Git配置命令查看是否配置成功重置配置 工作区、暂存区、版本库添加文件--场景一概述实例操作 查看.git文件添加文件--场景二修改文件版本回退撤销修改情况⼀:对于工作区的代码,还没有 add情况⼆:已经 add &#…

单片机和RTOS

一.单片机和RTOS区别 单片机是一种集成了处理器、内存、输入输出接口和外围设备控制器等功能的微型计算机系统。它通常用于控制简单的嵌入式系统,如家电、汽车电子、工业控制等。单片机具有低功耗、低成本和高可靠性等特点。 而RTOS(Real-Time Operati…

HTTP 请求 400错误

问题 HTTP 请求 400错误 详细问题 客户端发送请求 public static UserInfo updateUserInfo(UserInfo userInfo) {// 创建 OkHttpClient 对象OkHttpClient client new OkHttpClient();// 创建请求体MediaType JSON MediaType.parse("application/json; charsetutf-8&…

DS:栈和队列的相互实现

创作不易,感谢友友们三连!! 一、前言 栈和队列的相互实现是用两个栈去实现队列或者是用两个队列去实现栈,这样其实是把问题复杂化的,实际中没有什么应用价值,但是通过他们的相互实现可以让我们更加深入地理…

快乐学Python,通过用户和订单的数据分析,制定营销策略【实战】

在互联网行业中,电子商务领域绝对是数据分析用途最多的地方,各大电商平台都依赖数据分析帮助其挖掘用户订单增长机会。比如某宝的随手买一件,核心思路也就是根据用户的日常浏览内容及停留时间,以及订单的关联度来进行推荐的。 本篇…

ssm在线学习平台-计算机毕业设计源码09650

目 录 摘要 1 绪论 1.1 选题背景及意义 1.2国内外现状分析 1.3论文结构与章节安排 2 在线学习平台系统分析 2.1 可行性分析 2.2 系统业务流程分析 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 在线学习平台总体设计 …

基于ant的图片上传组件封装(复制即可使用)

/*** 上传图片组件* param imgSize 图片大小限制* param data 上传数据* param disabled 是否禁用*/import React, { useState,useEffect } from react; import { Upload, Icon, message} from antd; const UploadImage ({imgSize 50,data { Directory: Image },disabled f…

文物保护系统守护历史岁月,成都青铜展科技闪耀

一、“吉金万里-中国西南青铜文明展”隆重开幕 1月27日,“吉金万里-中国西南青铜文明展”在成都金沙遗址博物馆向公众开放,奉上一场精彩的青铜文明“盛宴”。本次展览汇集了中国西南地区32家文博单位,以青铜器为代表的294件经典文物&#xf…

vue3+ts项目推荐(企业级0到1开发)H5

一、技术方案 基于 vue3typescript 中大型项目开发解决方案基于 vant 组件库快速构建H5界面解决方案基于 vue-router 的前端路由解决方案基于 vite 的 create-vue 构建vue3项目解决方案基于 pinia 的状态管理解决方案基于 pinia-plugin-persistedstate 状态持久化解决方案基于…

视频接入协议之MIPI

MIPI(Mobile Industry Processor Interface)是一种用于移动设备的串行接口标准,旨在提供高速、低功耗、低成本的接口解决方案。MIPI联盟是一个全球性的组织,致力于开发、推广和管理MIPI标准。 MIPI接口包括了多种协议和规范&…

typescript typeof操作符

ts typeof 操作符简介 在TypeScript中,typeof是一个操作符,用于获取一个值的类型。它可以与任何值一起使用,并返回一个描述该值类型的字符串。 typeof操作符在TypeScript中的用法与JavaScript中的用法非常相似。 如下,众所周知,在js中提供…

day03-股票数据报表与导出

day03-股票数据表报与导出 目标 理解涨幅榜业务需求;理解涨停跌停概念,并涨停跌停基本实现;理解涨停跌停SQL分析流程,并根据接口文档自定义实现;理解echarts基本使用;掌握easyExcel基本使用,并实现涨幅榜数据导出功能; 第一章 股票涨幅统计 1、涨幅榜…

【C++关键字】auto以及指针空值nullpr

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 前言1.类型别名思考2…

SQL110 插入记录(一)(插入和interval关键字的用法)

代码 insert into exam_record(uid,exam_id,start_time,submit_time,score) values(1001,9001,2021-09-01 22:11:12,2021-09-01 22:11:12interval 50 minute,90), (1002,9002,2021-09-04 07:01:02,null,null)知识点 interval关键字的用法 INTERVAL关键字一般使用格式为&#x…

牛客网 HJ76 尼克彻斯定理

题目&#xff1a; 思路&#xff1a; 主要是要找规律&#xff0c;即m^3&#xff08;m*m-m1j&#xff09;……&#xff0c;j从0每次递增2 然后就是注意输出格式 答案&#xff1a; #include <stdio.h> int main() {int m0; again:scanf("%d",&m);if(m<…

基于Springboot+Vue的在线考试系统源码

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着现代教育和职业培…

实习日志15

1.大改了一下界面 1.1.识别与验真 1.2.历史记录 2.改了几个bug 2.1.改json格式用JSON.stringify(value,null,2); 2.2.内嵌页面值与原页面值重复 2.3.验真条件判断 if (isVerifyCell.getValue() "不需要") {if (verifyResultCell.getValue() ! "未查验")…

ChromeDriver | 谷歌浏览器驱动下载地址 及 浏览器版本禁止更新

在使用selenoum时&#xff0c;需要chrome浏览器的版本和chrome浏览器驱动的版本一致匹配&#xff0c;才能进行自动化测试 一、ChromeDriver驱动镜像网址 国内可以搜到的谷歌浏览器下载地址里面最新的驱动器只有114版本的CNPM Binaries Mirror 在其他博主那找到了最新版本12X的…

Unity3d Mesh篇(一)— 创建简单三角面

文章目录 前言一、Mesh组成二、使用步骤三、效果四、总结 前言 Mesh&#xff08;网格&#xff09;是一种常用的3D图形表示方法&#xff0c;它由顶点&#xff0c;法线&#xff0c;UV 坐标&#xff0c;和三角形等组成。您可以使用 Mesh 类的方法来创建或修改网格&#xff0c;也可…