• caddy配置反向代理和ssl证书申请


    下载Caddy

    caddy官网下载地址https://caddyserver.com/download。也可以直接点此下载linux amd64版本。 目前最新版本为2.4.6

    如果是需要申请泛域名证书则需要勾选对应dns提供商的插件,比如cloudflare

    注意:cloudflare不再支持.cf, .ga, .gq, .ml,  .tk后缀域名使用api管理dns,也就是这些后缀的域名是不能通过cloudflare申请泛域名证书。

    下载之后重命名为caddy拷贝到/usr/local/bin下即可。

    配置文件Caddyfile

    在任意目录新建一个文件Caddyfile, 推荐位置为/etc/caddy/Caddyfile

    输入以下内容, 表示将www.mydomain.cf转发到localhost:16325,并且自动通过let's encrypt申请ssl证书,申请邮箱为my@qq.com.  开启tls则会默认把http重定向到https

    www.mydomain.cf {
            reverse_proxy localhost:16325
            tls my@qq.com
    }

    如果是同时开启http和https访问则

    www.mydomain.cf:80  www.mydomain.cf:443{
            reverse_proxy localhost:16325
            tls my@qq.com
    }

    反向代理一般用于后端站点,前端站点则直接可以是静态站点,如果是docker运行的也可以反向代理

    以下为静态站点配置,开启https, 站点根目录为/www/vue

    www.mydomain.cf {
        tls my@qq.com
        root * /www/vue
        file_server
    }

    启动caddy

    运行以下命令即可让caddy进入后台运行。其中/etc/caddy/Caddyfile是配置文件Caddyfile所在路径,--dapter caddyfile表示指定配置文件适配器为caddyfile格式,默认是json,caddyfile也可以翻译为json.

    如caddy adapt --config /etc/caddy/caddyfile > /etc/caddy/file.json就是将caddyfile翻译为json并输出,然后caddy start的config参数指定为json文件即可。

    caddy start --config /etc/caddy/Caddyfile --adapter caddyfile
    

    caddy start是后台启动,但是日志会在当前控制台输出,关闭当前控制台也会继续运行

    caddy run是前台启动,当前控制台关闭进程也会关闭

    二者参数一致

    证书目录在$XDG_DATA_HOME/certificates/acme-v02.api.letsencrypt.org-directory,$XDG_DATA_HOME在不同系统中对应关系如下

    OSData directory path
    Linux, BSD $HOME/.local/share/caddy
    Windows %AppData%\Caddy
    macOS $HOME/Library/Application Support/Caddy
    Plan 9 $HOME/lib/caddy
    Android $HOME/caddy (or /sdcard/caddy)

    也就是说linux下是~/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory。

    修改数据存储目录[可选]

    通过修改数据存储目录可以让ssl证书存储到其他路径

    Caddyfile增加全局配置storage。如下所示,会把数据目录修改为/etc/ssl/caddy, 这样证书所在路径就变为了/etc/ssl/caddy/certificates/acme-v02.api.letsencrypt.org-directory。

    需要注意一下的是如果letsencrypt证书获取失败会自动改为获取zerossl的证书,则路径会变为/etc/ssl/caddy/certificates/acme.zerossl.com-v2-dv90

    但是需要保证/etc/ssl/caddy存在且当前用户有权限读写和修改,比如 sudo chmod 747 /etc/ssl/caddy -R.

    caddyfile内容如下

    {
            storage file_system {
                    root /etc/ssl/caddy
            }
    }
    www.mydomain.com {
            reverse_proxy localhost:16325
            tls my@qq.com
    }
    

      

    添加到systemd运行

    新建文件/usr/lib/systemd/system/caddy.service(centos)或者/etc/systemd/system/caddy.service(ubuntu),内容如下. 记得将User=my中my修改为有权限的用户名。

    [Unit]
    Description=Caddy HTTP/2 web server
    After=network-online.target
    Wants=network-online.target systemd-networkd-wait-online.service

    [Service]
    User=my
    Restart=on-abnormal

    ExecStart=/usr/local/bin/caddy run --config=/etc/caddy/Caddyfile --adapter=caddyfile
    ExecReload=/bin/kill -USR1 $MAINPID
    ; Use graceful shutdown with a reasonable timeout
    KillMode=mixed
    KillSignal=SIGQUIT
    TimeoutStopSec=5s
    ProtectSystem=full
    [Install]
    WantedBy=multi-user.target

    然后执行

    systemctl enable caddy.service
    systemctl start caddy.service
    systemctl status caddy.service

    泛域名证书申请和使用

    泛域名证书只能通过dns记录来验证,所以需要配置dns提供商的信息

    对于.cf, .ga, .gq, .ml,  .tk后缀的域名基本就告别自动泛域名证书了,cloudflare不允许通过api调用修改dns,而国内不允许此类域名备案。

    1. 安装对应域名提供商的dns模块,常用的国内有阿里云(alidns)和腾讯云(dnspod), 国外有cloudflare 微软(azure) 谷歌(googleclouddns)

    可以在下载caddy时勾选对应模块。如果没有勾选也没关系,可以通过命令行下载

    cloudflare

    cadd add-package github.com/caddy-dns/cloudflare

    阿里云

    cadd add-package github.com/caddy-dns/alidns

    腾讯云

    cadd add-package github.com/caddy-dns/dnspod

    安装完毕后修改caddyfile, 不同dns提供商的模块配置略微有些区别

    cloudflare   

    将cloudflare_key替换为自己的key, 从这里创建一个dns api令牌即可

    *.my.com {
        tls {
           dns cloudflare cloudflare_apikey
        }
    }

    阿里云

    key_id和key_secret来自控制台创建的accesskey,从这里可以创建,region就是账户所属区域,可不填,默认为 zh-hangzhou

    *.my.com {
        tls { 
    dns alidns { access_key_id key_id access_key_secret key_secret # region_id region
    }
    } }

    腾讯云

    dnspod需要的是api token,由 ID,Token 组合而成的,用英文的逗号分割, 这里有说明如何创建Token.  如id为3245,token为sf3fwr234,则完整的api_token为 3245,sf3fwr234

    *.my.com {
        tls {
          dns dnspod api_token
    }
    

     

    泛域名证书的使用

    默认目录配置, 当前用户为my, 域名为my.com

    *.my.com {
        tls {
    dns cloudflare cloudflare_apikey
    } } www.my.com { proxy localhost:
    5000 tls /home/my/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/wildcard_.my.com/wildcard_.my.com.crt /home/my/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/wildcard_.my.com/wildcard_.my.com.key }

    修改数据目录为/etc/ssl/caddy后的配置

    {
            storage file_system {
                    root /etc/ssl/caddy
            }
    }
    *.my.com {
        tls {
             dns cloudflare cloudflare_apikey
        }
    }
    
    www.my.com {
            reverse_proxy localhost:8080
            tls /etc/ssl/caddy/certificates/acme-v02.api.letsencrypt.org-directory/wildcard_.my.com/wildcard_.my.com.crt /etc/ssl/caddy/certificates/acme-v02.api.letsencrypt.org-directory/wildcard_.my.com/wildcard_.my.com.key
    }
    
    api.my.com {
            reverse_proxy localhost:5000
            tls /etc/ssl/caddy/certificates/acme-v02.api.letsencrypt.org-directory/wildcard_.my.com/wildcard_.my.com.crt /etc/ssl/caddy/certificates/acme-v02.api.letsencrypt.org-directory/wildcard_.my.com/wildcard_.my.com.key
    }
  • 相关阅读:
    PCA 主成分分析实践 plink软件
    c语言中基本数据类型
    c语言中利用itoa函数将整数值以二进制、八进制、十六进制显示
    c语言中以10进制、8进制、16进制显示同一个数字
    c语言中实现文件的复制(文本复制和二进制复制)
    c语言 13-13
    c语言显示文件自身
    LYDSY模拟赛day2 Dash Speed
    LYDSY模拟赛day2 Market
    LYDSY模拟赛day2 Divisors
  • 原文地址:https://www.cnblogs.com/turingguo/p/caddy.html
Copyright © 2020-2023  润新知