下載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在不同系統中對應關係如下
OS | Data 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
}