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

2024-02-20 21:12

本文主要是介绍Caddy 自动HTTPS 反向代理、重定向、静态页面 - docker版,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

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/caddyencode gzipfile_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
第三步:测试

在这里插入图片描述

这篇关于Caddy 自动HTTPS 反向代理、重定向、静态页面 - docker版的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/729558

相关文章

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与