前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 Caddy 替代 Nginx

使用 Caddy 替代 Nginx

作者头像
EmoryHuang
发布2022-10-31 16:44:57
2.4K0
发布2022-10-31 16:44:57
举报
文章被收录于专栏:EmoryHuang's Blog

使用 Caddy 替代 Nginx

前言

Caddy 2 is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go

Caddy 是一个 Go 编写的 Web 服务器,类似于 Nginx。相较于 Nginx 来说,Caddy 的配置简单了很多,而且默认启用了 https,更加的安全。

最开始的时候,我使用的还是 Nginx 进行部署,当时主要是也不太了解,磕磕碰碰查资料来部署静态网站,复制粘贴后也能把 server 写起来,但对于里面的字段配置也不怎么明确。最近想要弄反向代理的时候,感觉配置没问题,但就是代理不成功,可能就是菜吧 😣

在查找问题的过程中,发现了 Caddy,简单尝试之后发现相较于 Nginx 来说,Caddy 的配置简单了很多,没有 Nginx 那么多的配置项。

当然,如果你是用的是宝塔面板,可以忽略上面的所有问题。虽然当初主要是抱着学习的目的没有用宝塔,但确实越来越感觉宝塔是真的方便,可是这就是折腾吧。

安装 Caddy

官方提供了许多安装方式,你可以在安装页面找到它们。

我服务器的环境是 Ubuntu 20.04,可以直接使用下面的命令行方式安装,并且自动将 Caddy 作为 systemd 服务:

代码语言:javascript
复制
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

如果你熟悉 docker, 也可以直接使用

代码语言:javascript
复制
docker pull caddy

常用命令

代码语言:javascript
复制
caddy start     # 启动
caddy stop      # 停止
caddy reload    # 重载

Caddyfile 配置

Caddy 可以用命令行启动 HTTP 服务,也可以用配置文件(默认:Caddyfile,当然新版也实现了 json 方式控制),这里我的方案是通过配置文件 Caddyfile 来进行配置,毕竟命令行方式还是只适用临时使用。

默认会在 /etc/caddy/ 目录下生成一个 Caddyfile 文件,你可以在这里配置你的服务器,Caddyfile 的配置还是比较简单的,下面是官网的一个示例:

代码语言:javascript
复制
emoryhuang.cn {
    root * path/to/blog
    encode gzip
    tls path/to/emoryhuang.cn.pem path/to/emoryhuang.cn.key
}

首先是网站地址,可以使用通配符,这些是有效地址的示例:

  • localhost
  • example.com
  • :443
  • http://example.com
  • localhost:8080
  • 127.0.0.1
  • [::1]:2015
  • example.com/foo/*
  • *.example.com
  • http://

同时映射多个地址

如果多个站点共享相同的定义,你可以将所有站点一起列出:

代码语言:javascript
复制
emoryhuang.cn, www.emoryhuang.cn {
    ...
}

Caddyfile 指令

指令 Directives

说明

root

设置站点根目录的路径

gzip

启用 gzip 压缩

tls

自定义 tls

reverse_proxy

反向代理

redir

重定向

你可以在官方文档中找到更多的指令。

自定义 SSL 证书

代码语言:javascript
复制
emoryhuang.cn {
    root * path/to/blog
    tls path/to/emoryhuang.cn.pem path/to/emoryhuang.cn.key
}

反向代理

caddy 中,配置一个反向代理非常简单,使用 reverse-proxy 命令即可。

代码语言:javascript
复制
cloud.emoryhuang.cn {
    reverse_proxy localhost:5212
}

访问 https://cloud.emoryhuang.cn 实际上访问的是服务器的 5212 端口。

利用以下配置可将 https://cloud.emoryhuang.cn/proxy 反向代理到 localhost:5212

代码语言:javascript
复制
cloud.emoryhuang.cn {
    reverse_proxy /proxy localhost:5212
}

重定向

访问 www.emoryhuang.cn 会 302 Redirect 重定向到 https://emoryhuang.cn

代码语言:javascript
复制
www.emoryhuang.cn {
    redir https://emoryhuang.cn{uri}
}

多站点配置

如果要进行多个站点的配置,只需要在 Caddyfile 中简单罗列即可。

代码语言:javascript
复制
emoryhuang.cn {
    root * path/to/blog
    encode gzip
    tls path/to/emoryhuang.cn.pem path/to/emoryhuang.cn.key
}

home.emoryhuang.cn {
    root * path/to/homepage
    encode gzip
    tls path/to/home.emoryhuang.cn.pem path/to/home.emoryhuang.cn.key
    file_server
}

cloud.emoryhuang.cn {
    reverse_proxy localhost:5212
    tls path/to/cloud.emoryhuang.cn.pem path/to/cloud.emoryhuang.cn.key
}

自动 HTTPS

Caddy 是第一个也是唯一一个默认自动使用 HTTPS 的 Web 服务器。

默认情况下,Caddy 通过 HTTPS 为所有站点提供服务。

  • Caddy 使用本地自动信任的自签名证书(如果允许)通过 HTTPS 提供 IP 地址和本地/内部主机名。
  • Caddy 使用来自公开的 ACME CA 的证书,通过 HTTPS 提供公共 DNS 名称。

Caddy 会自动更新所有托管证书并将 HTTP(默认端口 80)重定向到 HTTPS(默认端口 443)。

总结

总的来说,相较于 Nginx 来说,Caddy 还是简单了很多,如果你熟悉 Nginx,可以比较一下同等情况下 Nginx 的配置,个人觉得还是比较省心的。

你可以在官方文档中到达更多内容。

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用 Caddy 替代 Nginx
    • 前言
      • 安装 Caddy
        • 常用命令
          • Caddyfile 配置
            • 同时映射多个地址
            • Caddyfile 指令
            • 自定义 SSL 证书
            • 反向代理
            • 重定向
            • 多站点配置
          • 自动 HTTPS
            • 总结
              • 参考资料
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档