前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Caddy 2 的安装与配置

Caddy 2 的安装与配置

作者头像
BinGo_Blog
发布2022-11-01 16:41:25
4.6K0
发布2022-11-01 16:41:25
举报
文章被收录于专栏:BinGo's BlogBinGo's Blog

前言

Caddy是一个Go编写的Web服务器,类似于Nginx,Caddy提供了更加强大的功能,相较于Nginx来说使用Caddy有如下优势:

  • 自动的HTTPS证书申请
  • 自动证书续期以及OCSP stapling等
  • 更高的安全性包括但不限于TLS配置以及内存安全等
  • 友好且强大的配置文件支持
  • 支持API动态调整配置
  • 支持HTTP3(QUIC)
  • 支持动态后端,例如连接Consul、作为k8s ingress等
  • 后端多种负载策略以及健康检测等
  • 本身Go编写,高度模块化的系统方便扩展

安装

官方网站

通过github的链接可以快速部署。

代码语言:javascript
复制
wget -N –no-check-certificate https://raw.githubusercontent.com/iiiiiii1/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh

    #备用地址

    wget -N –no-check-certificate https://www.moerats.com/usr/shell/Caddy/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh

你可以用来验证安装是否成功

代码语言:javascript
复制
/etc/init.d/caddy status

当然也可能报错,报错请根据报错内容,进行添加相关环境。

服务管理

启动:/etc/init.d/caddy start

停止:/etc/init.d/caddy stop

重启:/etc/init.d/caddy restart

查看状态:/etc/init.d/caddy status

查看Caddy启动日志: tail -f /tmp/caddy.log

Caddy配置文件位置:/usr/local/caddy/Caddyfile

Caddy自动申请SSL证书位置:/.caddy/acme/acme-v01.api.letsencrypt.org/sites/xxx.xxx(域名)/

如果你想要卸载Caddy,请使用下面的命令,运行后输入y即可卸载。

代码语言:javascript
复制
wget -N –no-check-certificate https://raw.githubusercontent.com/iiiiiii1/doubi/master/caddy_install.sh && bash caddy_install.sh uninstall

    #备用地址

    wget -N –no-check-certificate https://www.moerats.com/usr/shell/Caddy/caddy_install.sh && bash caddy_install.sh uninstall

修改配置文件,这一步很关键,你所有的对于caddy的配置写法都是在这里。

代码语言:javascript
复制
vim /usr/local/caddy/Caddyfile

常见配置

配置模块化

import指令除了支持引用配置片段以外,还支持引用外部文件,同时支持通配符,有了这个命令后就可以方便的将配置文件进行模块化处理:

代码语言:javascript
复制
*为通配符
    #这一部分有问题,后来搞明白了重新写的
    其实想模块化管理很简单,你只需要在修改配置文件“/usr/local/caddy/Caddyfile”的时候只加 “import ./(统一名称)* ”或者“import (模块化文件地址)”
    举个例子 我是使用的“import ./caddy_* ”,它的意思就是在“/usr/local/caddy/”文件夹下所有的“caddy_(随便的编号)”都被引用为配置文件。

HTTPS

代码语言:javascript
复制
填写自己的域名 {
        root * /var/www
        file_server
    }

如果不写端口,默认会自动使用SSL证书,并且端口号为443。

代码语言:javascript
复制
填写自己的域名:8888 {
        root * /var/www
        file_server
    }
代码语言:javascript
复制
你的域名{
    gzip
    tls (邮箱
    proxy 访问的地址或者127.0.0.1:端口
    }

就算写了端口号,只要不是80,也会使用SSL证书。

这个是可以自动申请ssl证书的

注意一个域名下的子域名都可以申请证书,但是第一个申请的速度较快,后续的会稍慢点。

HTTP

如果不想使用SSL证书,单纯的HTTP访问有以下方式。

代码语言:javascript
复制
填写自己的域名:80 {
        root * /var/www
        file_server
    }
    # 或者
    http://填写自己的域名 {
        root * /var/www
        file_server
    }
    # 或者
    http://填写自己的域名:8888 {
        root * /var/www
        file_server
    }

自定义SSL证书

代码语言:javascript
复制
当自己有证书时,把相关证书上传,个人建议放在root路径里,当然不是root路径也可以。
    填写自己的域名 {
        root * /var/www
        tls 公钥路径(这里有个空格)私钥路径
        file_server
    }

同时映射多个地址

代码语言:javascript
复制
localhost:8888,
    填写自己的域名一,
    填写自己的域名二 {
        root * /var/www
        tls 公钥路径(这里有个空格)私钥路径
        file_server
    }

反向代理

代码语言:javascript
复制
填写自己的域名 {
        reverse_proxy localhost:6000
    }

访问https://qoant.com实际上访问的是服务器的6000端口。

利用以下配置可将https://zh996.com/proxy反向代理到localhost:6000

代码语言:javascript
复制
填写自己的域名 {
        reverse_proxy /proxy localhost:6000
    }

重定向

代码语言:javascript
复制
填写自己的域名一 {
        redir https://填写自己的域名二{uri}
    }

访问域名一302 Redirect重定向到域名二

代码语言:javascript
复制
域名一 {
        redir https://域名二{uri} permanent
    }

访问域名一301 Move permanently重定向到域名二

负载均衡

代码语言:javascript
复制
填写自己的域名 {
        reverse_proxy localhost:9000(一个端口) localhost:9001(另一个端口) {
            lb_policy first
        }
    }

Websocket反向代理

代码语言:javascript
复制
填写自己的域名 {
      # HTTP代理配置
      # 此时访问自己的域名,实际访问的是127.0.0.1:8080/app/的内容
      reverse_proxy / 127.0.0.1:8080/app/
     
      # WebSocket代理配置
      # 客户端请求的wss://ws.xxx.com/ws,实际为wss://127.0.0.1:8080/ws
      reverse_proxy /ws 127.0.0.1:8080
    }

跨域访问

代码语言:javascript
复制
(cors) {
        @origin header Origin {args.0}
        header @origin Access-Control-Allow-Origin "{args.0}"
        header @origin Access-Control-Request-Method GET
    }
     
    域名 {
        import cors 另一个域名
    }

别忘了修改以后重启caddy!

合法的地址格式:

localhos

texample.com:443

http://example.com

localhost:8080

127.0.0.1

example.com/foo/*

*.example.com

http://

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 服务管理
  • 常见配置
    • 配置模块化
      • HTTPS
        • HTTP
          • 自定义SSL证书
            • 同时映射多个地址
              • 反向代理
                • 重定向
                  • 负载均衡
                    • Websocket反向代理
                      • 跨域访问
                      • 合法的地址格式:
                      相关产品与服务
                      SSL 证书
                      腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档