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

打印 上一主题 下一主题

主题 774|帖子 774|积分 2322

简介

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
拉取镜像
  1. docker pull caddy
复制代码

第一步:创建index.html
创建index.html并写入内容hello world
  1. echo "hello world" > index.html
复制代码

第二步:启动容器
  1. docker run -d --name=caddy -p 80:80 \
  2.     -v $PWD/index.html:/usr/share/caddy/index.html \
  3.     -v caddy_data:/data \
  4.     caddy
复制代码

第三步:测试
本地测试:curl http://localhost/,出现hello world表现成功。
浏览器测试:浏览器窗口输入服务器IP
测试成功。
设置IP访问的静态页面

设置IP访问的静态页面和上面hello world差不多。区别就是Caddyfile文件是利用自定义的,hello world是利用默认的Caddyfile。index.html文件就是静态页面。
由于上面已经启动了caddy容器,如果必要继续下去的话可以删除容器。
  1. docker rm -f caddy
复制代码
第一步:创建Caddyfile
  1. vim Caddyfile
复制代码
输入上面的命令之后,会进入vim编辑页面,按i键进入编辑模式,粘贴以下内容
  1. http:// {
  2.     root * /usr/share/caddy
  3.     encode gzip
  4.     file_server
  5. }
复制代码
按Esc键后输入:wq回车保存退出。

第二步:编写静态页面内容
为了和hello world区分开来,改一下静态页面的内容。
改成如下所示:

第三步:运行容器
下面我把caddy中的data目录挂载到主机的/data/caddy/data方便以后有需求要下载证书文件。
  1. 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 -v /data/caddy/data:/data  --restart=always caddy:latest
复制代码
第四步:测试
浏览器输入服务器IP。

设置带域名的静态页面

上面的还是通过IP的方式去访问静态页的。如何通过域名的方式去访问静态页呢?
只需在Caddyfile设置就行。
注意:小搭档必要做测试学习,最好找一个国外的服务器,如今国内的服务器做域名剖析必要备案才能利用。
下面是阿里云的通知:

第一步:修改Caddyfile
Caddyfile内里填写自己的域名,位置我有注释。
  1. # Caddyfile 配置文件
  2. # 全局配置
  3. http:// {
  4.   # 根目录,指向所有静态文件的根目录
  5.   # 这里设置为 `/usr/share/caddy`
  6.   root * /usr/share/caddy
  7.   # 启用 gzip 压缩
  8.   encode gzip
  9.   # 启用文件服务器功能
  10.   file_server
  11. }
  12. # 虚拟主机配置
  13. # 下面的域名填写自己解析的域名 - 注意
  14. caddy.xxxxx.fun {
  15.   root * /usr/share/caddy
  16.   # 启用 gzip 压缩
  17.   encode gzip
  18.   # 启用文件服务器功能
  19.   file_server
  20. }
复制代码
为了区分我再次修改静态页面的内容

修改好之后直接重启caddy即可。
第二步:重启caddy
  1. docker restart caddy
复制代码
第三步:测试
在浏览器输入域名,回车。
而且可以看到caddy为我们自动申请了证书。

设置带域名的反向代理

为了测试,我在服务器上启动了一个服务,http://localhost:19850/端口为19850,如今我必要利用caddy去反向代理到19850这个服务。

第一步:修改Caddyfile
设置中必要填写自己的服务器IP
  1. # Caddyfile 配置文件
  2. # 虚拟主机配置
  3. # 下面的域名修改为自己的 - 注意
  4. caddy.xxxxxxx.fun {
  5.   # 反向代理配置
  6.   # 将所有请求转发到 服务器IP:19850 地址 - 注意
  7.   reverse_proxy 服务器IP:19850
  8.   # 启用 gzip 压缩
  9.   encode gzip
  10. }
复制代码
第二步:重启caddy
  1. docker restart caddy
复制代码
第三步:测试
可以看到通过caddy的反代,成功访问19850端口的服务。

设置带域名的重定向

第一步:修改Caddyfile
重定向到百度。
  1. # Caddyfile 配置文件
  2. # 虚拟主机配置
  3. caddy.xxxx.fun {
  4.   # 重定向所有请求到 https://baidu.com
  5.   # 将请求的 URI 路径附加到 https://baidu.com 之后,并将其作为新的目标 URL 进行重定向
  6.   redir https://baidu.com{uri}
  7. }
复制代码
  重定向所有请求: 将所有请求重定向到 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
第三步:测试


踩坑

80、443端口未开放导致证书申请失败

查看日志日过证书申请失败的话。
当Caddy在Docker容器中运行时,它尝试通过尺度的HTTP和HTTPS端口(即80和443端口)来验证域名所有权。如果Docker容器的80端口和443端口没有正确袒露给外部访问,Caddy在尝试验证域名时会失败,导致证书申请失败。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

徐锦洪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表