淺談|WEB 服務器 -- Caddy
Caddy
Caddy服務器(或稱Caddy Web)是一個開源的,使用 Go 編寫,支持 HTTP/2 的 Web 服務端,說到Web 服務器,我們大多想到的是 Apache 和 Nginx,在擁有了強大的 Nginx 以后我們為什么還需要 Caddy?
優點:
- 自動支持HTTP/2協議
- 使用 Let’s Encrypt 讓你的站點全自動變成全站HTTPS,無需任何配置,當然您可以使用自己的密鑰和證書
- 得益於 Go 的特性,Caddy 只是一個小小的二進制文件,沒有依賴,易於部署/使用 配置起來十分簡便
- 可以合理使用多核
- Caddy 對 WebSockets 有很好的支持
- 自動把 Markdown 轉成 HTML
- 完全支持最新的IPv6
- 以自定義格式創建日志
- 適用於所有已知的平台 - Windows,Linux,BSD,Mac,Android
缺點:
要說它的缺點,就是效率不如Apache、Nginx,因此對於以下幾種還是十分友好的
推薦場景:
- 作為 個人博客的 Server
- 作為 靜態頁面的 WebServer
- 反向代理,管理多個站點
- 微服務 等等…
安裝
Caddy 提醒定制化的下載,可以自由選擇各種插件和平台,請前往官網: https://caddyserver.com/download 下載
一、一鍵腳本安裝(非商業版本)1:
curl https://getcaddy.com | bash -s personal
腳本執行完成后,執行 which caddy
,可以看到 caddy 已被安裝到了 /usr/local/bin/caddy;caddy -version
查看版本號
二、手動安裝(需要商業許可證)
- https://caddyserver.com/download 進入到 caddy 官網的下載界面,選擇平台和插件
- 然后使用下方 Direct link to download 內的鏈接即可
- 解壓之后用 cp 命令放到 /usr/local/bin/caddy 就完成了安裝
運行
caddy
輸入 caddy
,然后打開瀏覽器輸入: http://ip:2015 ,得到了一個404頁面,Caddy 已經成功運行了
(1)、在無配置文件的情況下,Caddy 默認是映射當前程序執行的目錄所有文件(即/usr/local/bin),因此可以創建一個文件:
touch index.html echo "<h1>Hello Caddy...</h1>" >> index.html
刷新瀏覽器, Hello Caddy… 已經出現在頁面上
(2)、默認情況下,Caddy 運行在 2015 端口,可以使用 Caddy 命令行工具來自定義運行端口
例:改為運行在80端口
caddy -port 80
其他幫助:
caddy -h
配置文件
一、Host網站配置
Caddy 的各種強大功能還得需要 Caddyfile 來體現,Caddy 不強制你把配置文件放到哪個特定文件夾,可以在任意目錄放置我們的配置文件,通過命令行 caddy -conf 即可指定
創建配置文件(本文我們把配置文件放在/usr/local/bin/下)
touch /usr/local/bin/Caddyfile #創建配置文件 chown -R root:www-data /usr/local/bin #設置目錄數據權限
編輯 /usr/local/bin/Caddyfile 文件
echo -e ":80 { root /usr/local/bin/www }" > /usr/local/bin/Caddyfile
- 解釋
- 這是一個最簡單的 Host 網站配置
- ‘:80’表示將網站綁定至可以訪問到本機的任意一個IP,暴露在80端口,也可以寫成 ‘0.0.0.0:80’
- root 參數則表示網站的根節點
通過 caddy -conf /usr/local/bin/Caddyfile
命令用Caddyfile配置文件方式運行Caddy
- 拓展配置
- 設置響應過期時間,啟用 gzip, 指定各種日志的輸出端等等
echo -e "0.0.0.0:80 { root /usr/local/www/ timeouts none #響應過期時間 none - 不過期 60s - 1分鍾過期 gzip #啟用gzip log /var/log/caddy/access.log #日志 errors /var/log/caddy/error.log #錯誤日志 }" > /usr/local/bin/Caddyfile
二、反向代理配置
echo -e ":80/api { proxy / 127.0.0.1:8080/api { transparent } }" > /usr/local/bin/Caddyfile
- 解釋:
- 當瀏覽器收到所有包含:80/api 的請求都會自動轉發到127.0.0.1:8080/api 這個地址
- transparent 這個設置保證了轉發不會在瀏覽器生成任何額外的 301 或者 302 請求
三、自動HTTPS
為已經綁定域名的服務器自動從 Let’s Encrypt 生成和下載 HTTPS 證書,支持 HTTPS 協議訪問,你只需要將綁定的 IP 換成 域名 即可
echo -e "xxx.com { root /var/www/html/ }" > /usr/local/bin/Caddyfile
運行Caddy,按照提示輸入你的 Email 之后,Caddy 會自動幫你獲取並啟用 HTTPS 證書
Caddy 簡單易用、自動 HTTPS ,此外 Caddy 還提供一大堆的插件供我們使用,是一款不錯的 Web 服務器
- (1)、需要 curl 文件傳輸工具支持,如果出現
-bash: curl: command not found
請先安裝 curl
(2)、You must specify a personal or commercial license; see getcaddy.com for instructions.
– 您必須指定個人或商業許可證; 有關說明,請參閱 https://getcaddy.com
假設有非商業許可證,請使用:curl https://getcaddy.com | bash -s personal
或者wget -qO- https://getcaddy.com | bash -s personal
您購買了商業許可證,則必須設置您的帳戶,環境變量中的ID和API密鑰:export CADDY_ACCOUNT_ID = ...
export CADDY_API_KEY = ...
然后使用:curl https://getcaddy.com | bash -s commercial
↩