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證書,申請郵箱爲[email protected].  開啓tls則會默認把http重定向到https

www.mydomain.cf {
        reverse_proxy localhost:16325
        tls [email protected]
}

如果是同時開啓http和https訪問則

www.mydomain.cf:80  www.mydomain.cf:443{
        reverse_proxy localhost:16325
        tls [email protected]
}

 

反向代理一般用於後端站點,前端站點則直接可以是靜態站點,如果是docker運行的也可以反向代理

以下爲靜態站點配置,開啓https, 站點根目錄爲/www/vue

www.mydomain.cf {
    tls [email protected]
    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。

但是需要保證/etc/ssl/caddy存在且當前用戶有權限讀寫和修改,比如 sudo chmod 747 /etc/ssl/caddy -R

{
        storage file_system {
                root /etc/ssl/caddy
        }
}
www.mydomain.cf {
        reverse_proxy localhost:16325
        tls [email protected]
}

 

添加到systemd運行

新建文件/usr/lib/systemd/system/caddy.service,內容如下. 記得將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 cloudflare cloudflare_apikey
}

阿里雲

key_id和key_secret來自控制檯創建的accesskey,從這裏可以創建,region就是賬戶所屬區域,可不填,默認爲 zh-hangzhou

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

騰訊雲

dnspod需要的是api token,由 ID,Token 組合而成的,用英文的逗號分割, 這裏有說明如何創建Token.  如賬戶id爲3245,token爲sf3fwr234,則完整的auth_token爲 3245,sf3fwr234

*.my.com {
    tls alidns {
        auth_token        token
}

 

泛域名證書的使用

默認目錄配置, 當前用戶爲my

*.my.com {
    tls 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 cloudflare cloudflare_apikey
}
www.mydomain.cf {
        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
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章